สร้าง Component สำหรับ Joomla 2.5 การสร้าง verifications

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 11752
Joined: 18/04/2012 9:39 am

สร้าง Component สำหรับ Joomla 2.5 การสร้าง verifications

Post by tsukasaz »

สร้าง Component สำหรับ Joomla 2.5 การตกแต่งส่วน backend

หลังจากการตกแต่ง Form เรียบร้อยแล้ว ลองเพิ่ม ลบ แก้ไข สามารถทำได้หมด
แต่ถ้าลองเพิ่มแบบไม่ใส่ค่าอะไรเลยแล้วกด save มันก็ให้ผ่าน ซึ่งในความเป็นจริงต้องมีการตรวจสอบค่าที่จำเป็นก่อน
ซึ่งในหัวข้อนี้เราจะเพิ่มการตรวจสอบให้กับ form กันนะครับ

เข้าไปที่โฟลเดอร์ admin -> views -> helloworld -> tmpl เปิดไฟล์ edit.php แก้โค้ด

Code: Select all

<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
      method="post" name="adminForm" id="helloworld-form" class="form-validate">
    <fieldset class="adminform">
        <legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
        <?php foreach($this->form->getFieldset() as $field): ?>
            <?php if (!$field->hidden): ?>
                <?php echo $field->label; ?>
            <?php endif; ?>
            <?php echo $field->input; ?>
        <?php endforeach; ?>
    </fieldset>
    <div>
        <input type="hidden" name="task" value="helloworld.edit" />
        <?php echo JHtml::_('form.token'); ?>
    </div>
</form>
เข้าไปที่โฟลเดอร์ admin -> models -> forms เปิดไฟล์ helloworld.xml แก้โค้ดหน่อยครับ

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<form
	addrulepath="/administrator/components/com_helloworld/models/rules"
>
	<fieldset>
		<field
			name="id"
			type="hidden"
		/>
		<field
			name="greeting"
			type="text"
			label="COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL"
			description="COM_HELLOWORLD_HELLOWORLD_GREETING_DESC"
			size="40"
			class="inputbox validate-greeting"
			validate="greeting"
			required="true"
			default=""
		/>
	</fieldset>
</form>
สร้างไฟล์ helloworld.js ใส่โค้ด

Code: Select all

window.addEvent('domready', function() {
	document.formvalidator.setHandler('greeting',
		function (value) {
			regex=/^[^0-9]+$/;
			return regex.test(value);
	});
});
สร้างไฟล์ submitbutton.js ใส่โค้ด

Code: Select all

Joomla.submitbutton = function(task)
{
	if (task == '')
	{
		return false;
	}
	else
	{
		var isValid=true;
		var action = task.split('.');
		if (action[1] != 'cancel' && action[1] != 'close')
		{
			var forms = $$('form.form-validate');
			for (var i=0;i<forms.length;i++)
			{
				if (!document.formvalidator.isValid(forms[i]))
				{
					isValid = false;
					break;
				}
			}
		}
 
		if (isValid)
		{
			Joomla.submitform(task);
			return true;
		}
		else
		{
			alert(Joomla.JText._('COM_HELLOWORLD_HELLOWORLD_ERROR_UNACCEPTABLE',
			                     'Some values are unacceptable'));
			return false;
		}
	}
}
เข้าไปที่โฟลเดอร์ admin -> views -> helloworld เปิดไฟล์ view.html.php

Code: Select all

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HelloWorld View
 */
class HelloWorldViewHelloWorld extends JView
{
    /**
     * display method of Hello view
     * @return void
     */
    public function display($tpl = null) 
    {
        // get the Data
        $form = $this->get('Form');
        $item = $this->get('Item');
        $script = $this->get('Script');
 
        // Check for errors.
        if (count($errors = $this->get('Errors'))) 
        {
            JError::raiseError(500, implode('<br />', $errors));
            return false;
        }
        // Assign the Data
        $this->form = $form;
        $this->item = $item;
        $this->script = $script;
 
        // Set the toolbar
        $this->addToolBar();
 
        // Display the template
        parent::display($tpl);
 
        // Set the document
        $this->setDocument();
    }
 
    /**
     * Setting the toolbar
     */
    protected function addToolBar() 
    {
        JRequest::setVar('hidemainmenu', true);
        $isNew = ($this->item->id == 0);
        JToolBarHelper::title($isNew ? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW')
                                     : JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'), 'helloworld');
        JToolBarHelper::save('helloworld.save');
        JToolBarHelper::cancel('helloworld.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
    }
    /**
     * Method to set up the document properties
     *
     * @return void
     */
    protected function setDocument() 
    {
        $isNew = ($this->item->id < 1);
        $document = JFactory::getDocument();
        $document->setTitle($isNew ? JText::_('COM_HELLOWORLD_HELLOWORLD_CREATING')
                                   : JText::_('COM_HELLOWORLD_HELLOWORLD_EDITING'));
        $document->addScript(JURI::root() . $this->script);
        $document->addScript(JURI::root() . "/administrator/components/com_helloworld"
                                          . "/views/helloworld/submitbutton.js");
        JText::script('COM_HELLOWORLD_HELLOWORLD_ERROR_UNACCEPTABLE');
    }
} 
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 11752
Joined: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การสร้าง verifications

Post by tsukasaz »

เข้าไปที่โฟลเดอร์ admin -> models เปิดไฟล์ helloworld.php ขึ้นมาแก้โค้ด

Code: Select all

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
 
/**
 * HelloWorld Model
 */
class HelloWorldModelHelloWorld extends JModelAdmin
{
    /**
     * Returns a reference to the a Table object, always creating it.
     *
     * @param    type    The table type to instantiate
     * @param    string    A prefix for the table class name. Optional.
     * @param    array    Configuration array for model. Optional.
     * @return    JTable    A database object
     * @since    2.5
     */
    public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array()) 
    {
        return JTable::getInstance($type, $prefix, $config);
    }
    /**
     * Method to get the record form.
     *
     * @param    array    $data        Data for the form.
     * @param    boolean    $loadData    True if the form is to load its own data (default case), false if not.
     * @return    mixed    A JForm object on success, false on failure
     * @since    2.5
     */
    public function getForm($data = array(), $loadData = true) 
    {
        // Get the form.
        $form = $this->loadForm('com_helloworld.helloworld', 'helloworld',
                                array('control' => 'jform', 'load_data' => $loadData));
        if (empty($form)) 
        {
            return false;
        }
        return $form;
    }
    /**
     * Method to get the script that have to be included on the form
     *
     * @return string    Script files
     */
    public function getScript() 
    {
        return 'administrator/components/com_helloworld/models/forms/helloworld.js';
    }
    /**
     * Method to get the data that should be injected in the form.
     *
     * @return    mixed    The data for the form.
     * @since    2.5
     */
    protected function loadFormData() 
    {
        // Check the session for previously entered form data.
        $data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array());
        if (empty($data)) 
        {
            $data = $this->getItem();
        }
        return $data;
    }
}
?>
สร้างโฟลเดอร์ rules เปิดเข้าไปสร้างไฟล์ greeting.php แล้วใส่โค้ด

Code: Select all

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla formrule library
jimport('joomla.form.formrule');
 
/**
 * Form Rule class for the Joomla Framework.
 */
class JFormRuleGreeting extends JFormRule
{
    /**
     * The regular expression.
     *
     * @access    protected
     * @var        string
     * @since    2.5
     */
    protected $regex = '^[^0-9]+$';
}
?>
เปิดไฟล์ helloworld.xml ขึ้นมาแก้ไขเวอร์ชั่น 0.0.10 เป็น 0.0.11

ทำเป็น .zip แล้ว เข้าไปหน้าของ administrator ไปเพิ่ม extensions เข้าไปใหม่
Last edited by tsukasaz on 11/05/2012 4:38 pm, edited 1 time in total.
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

User avatar
tsukasaz
PHP VIP Members
PHP VIP Members
Posts: 11752
Joined: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การสร้าง verifications

Post by tsukasaz »

ทีนี้ลองเข้าไปหน้าเพิ่มข้อมูล แล้วไม่ต้องกรอกข้อมูล กด save ระบบจะแจ้งขึ้นมา และต้องกรอกข้อมูลจึงจะ save ได้
Attachments
validate (Small).JPG
validate (Small).JPG (17.72 KiB) Viewed 2661 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

kui_vip
PHP Newbie
PHP Newbie
Posts: 7
Joined: 30/10/2012 12:23 pm

Re: สร้าง Component สำหรับ Joomla 2.5 การสร้าง verifications

Post by kui_vip »

ขอไฟล์โค้ดตัวอย่าง ด้วยคับ ยังงง กับที่อธิบายอยู่คับ
ขอบคุณคับ

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Share Knowledge”

Who is online

Users browsing this forum: Bing [Bot] and 8 guests