สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

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

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

ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

ตอนนี้เราจะเพิ่มหมวดหมู่ให้กับ component Hello World นะครับ

เข้าไปที่โฟลเดอร์ admin -> sql เปิดไฟล์ install.mysql.utf8.sql มาแก้ไข

โค้ด: เลือกทั้งหมด

DROP TABLE IF EXISTS `#__helloworld`;
 
CREATE TABLE `#__helloworld` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `greeting` varchar(25) NOT NULL,
  `catid` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__helloworld` (`greeting`) VALUES
	('Hello World!'),
	('Good bye World!');
เข้าไปในโฟลเดอร์ updates -> mysql สร้างไฟล์ 0.0.12.sql

โค้ด: เลือกทั้งหมด

ALTER TABLE `#__helloworld` ADD `catid` int(11) NOT NULL DEFAULT '0'
เข้าไปที่โฟลเดอร์ admin -> models -> forms เปิดไฟล์ helloworld.xml แ้ก้โค้ด

โค้ด: เลือกทั้งหมด

<?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_FIELD_GREETING_LABEL"
			description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
			size="40"
			class="inputbox validate-greeting"
			validate="greeting"
			required="true"
			default=""
		/>
		<field
			name="catid"
			type="category"
			extension="com_helloworld"
			class="inputbox"
			default=""
			label="COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_LABEL"
			description="COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_DESC"
			required="true"
		>
			<option value="0">JOPTION_SELECT_CATEGORY</option>
		</field>
	</fieldset>
</form>
เข้าไปที่โฟลเดอร์ admin -> models -> fields เปิดไฟล์ helloworld.php

โค้ด: เลือกทั้งหมด

<?php
// No direct access to this file
defined('_JEXEC') or die;
 
// import the list field type
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');
 
/**
 * HelloWorld Form Field class for the HelloWorld component
 */
class JFormFieldHelloWorld extends JFormFieldList
{
    /**
     * The field type.
     *
     * @var        string
     */
    protected $type = 'HelloWorld';
 
    /**
     * Method to get a list of options for a list input.
     *
     * @return    array        An array of JHtml options.
     */
    protected function getOptions() 
    {
        $db = JFactory::getDBO();
 
        /// $query = new JDatabaseQuery; WARNING - There's an error in this line, JDatabaseQuery is an abstract class
        $query = $db->getQuery(true); // THIS IS THE FIX, WARNING IT MUST BE FIXED IN THE ZIP FILES
 
        $query->select('#__helloworld.id as id,greeting,#__categories.title as category,catid');
        $query->from('#__helloworld');
        $query->leftJoin('#__categories on catid=#__categories.id');
        $db->setQuery((string)$query);
        $messages = $db->loadObjectList();
        $options = array();
        if ($messages)
        {
            foreach($messages as $message) 
            {
                $options[] = JHtml::_('select.option', $message->id, $message->greeting .
                                      ($message->catid ? ' (' . $message->category . ')' : ''));
            }
        }
        $options = array_merge(parent::getOptions(), $options);
        return $options;
    }
}?>
ทำเมนูย่อยใน component กลับไปที่โฟลเดอร์ admin สร้างโฟลเดอร์ helpers สร้างไฟล์ helloworld.php

โค้ด: เลือกทั้งหมด

<?php
// No direct access to this file
defined('_JEXEC') or die;
 
/**
 * HelloWorld component helper.
 */
abstract class HelloWorldHelper
{
    /**
     * Configure the Linkbar.
     */
    public static function addSubmenu($submenu) 
    {
        JSubMenuHelper::addEntry(JText::_('COM_HELLOWORLD_SUBMENU_MESSAGES'),
                                 'index.php?option=com_helloworld', $submenu == 'messages');
        JSubMenuHelper::addEntry(JText::_('COM_HELLOWORLD_SUBMENU_CATEGORIES'),
                                 'index.php?option=com_categories&view=categories&extension=com_helloworld',
                                 $submenu == 'categories');
        // set some global property
        $document = JFactory::getDocument();
        $document->addStyleDeclaration('.icon-48-helloworld ' .
                                       '{background-image: url(../media/com_helloworld/images/tux-48x48.png);}');
        if ($submenu == 'categories') 
        {
            $document->setTitle(JText::_('COM_HELLOWORLD_ADMINISTRATION_CATEGORIES'));
        }
    }
}
?>
แก้ไฟล์ controller.php ในโฟลเดอร์ admin

โค้ด: เลือกทั้งหมด

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller');
 
/**
 * General Controller of HelloWorld component
 */
class HelloWorldController extends JController
{
    /**
     * display task
     *
     * @return void
     */
    function display($cachable = false) 
    {
        // set default view if not set
        JRequest::setVar('view', JRequest::getCmd('view', 'HelloWorlds'));
 
        // call parent behavior
        parent::display($cachable);
 
        // Set the submenu
        HelloWorldHelper::addSubmenu('messages');
    }
} 
แก้ไฟล์ helloworld.php

โค้ด: เลือกทั้งหมด

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// require helper file
JLoader::register('HelloWorldHelper', dirname(__FILE__) . DS . 'helpers' . DS . 'helloworld.php');
 
// import joomla controller library
jimport('joomla.application.component.controller');
 
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('HelloWorld');
 
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
 
// Redirect if set by the controller
$controller->redirect(); 
เสร็จแล้วเข้าไปที่โฟลเดอร์ language -> en-GB เิปิดไฟล์ en-GB.com_helloworld.ini

โค้ด: เลือกทั้งหมด

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_ADMINISTRATION="HelloWorld - Administration"
COM_HELLOWORLD_ADMINISTRATION_CATEGORIES="HelloWorld - Categories"
COM_HELLOWORLD_HELLOWORLD_CREATING="HelloWorld - Creating"
COM_HELLOWORLD_HELLOWORLD_DETAILS="Details"
COM_HELLOWORLD_HELLOWORLD_EDITING="HelloWorld - Editing"
COM_HELLOWORLD_HELLOWORLD_ERROR_UNACCEPTABLE="Some values are unacceptable"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_DESC="The category the messages belongs to"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_LABEL="Category"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="This message will be displayed"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Message"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Greeting"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"
COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT="HelloWorld manager: Edit Message"
COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW="HelloWorld manager: New Message"
COM_HELLOWORLD_MANAGER_HELLOWORLDS="HelloWorld manager"
COM_HELLOWORLD_N_ITEMS_DELETED_1="One message deleted"
COM_HELLOWORLD_N_ITEMS_DELETED_MORE="%d messages deleted"
COM_HELLOWORLD_SUBMENU_MESSAGES="Messages"
COM_HELLOWORLD_SUBMENU_CATEGORIES="Categories"
เปิดไฟล์ helloworld.xml ขึ้นมาแก้ไขเวอร์ชั่น 0.0.11 เป็น 0.0.12
และแก้

โค้ด: เลือกทั้งหมด

<files folder="admin">
			<!-- Admin Main File Copy Section -->
			<filename>index.html</filename>
			<filename>helloworld.php</filename>
			<filename>controller.php</filename>
			<!-- SQL files section -->
			<folder>sql</folder>
			<!-- tables files section -->
			<folder>tables</folder>
			<!-- models files section -->
			<folder>models</folder>
			<!-- views files section -->
			<folder>views</folder>
			<!-- controllers files section -->
			<folder>controllers</folder>
		</files>
เป็น

โค้ด: เลือกทั้งหมด

<files folder="admin">
			<!-- Admin Main File Copy Section -->
			<filename>index.html</filename>
			<filename>helloworld.php</filename>
			<filename>controller.php</filename>
			<!-- SQL files section -->
			<folder>sql</folder>
			<!-- tables files section -->
			<folder>tables</folder>
			<!-- models files section -->
			<folder>models</folder>
			<!-- views files section -->
			<folder>views</folder>
			<!-- controllers files section -->
			<folder>controllers</folder>
			<!-- helpers files section -->
			<folder>helpers</folder>
		</files>
ทำเป็น .zip แล้ว เข้าไปหน้าของ administrator ไปเพิ่ม extensions เข้าไปใหม่
แก้ไขล่าสุดโดย tsukasaz เมื่อ 11/05/2012 4:39 pm, แก้ไขไปแล้ว 1 ครั้ง.
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

เข้าไปในหน้าของ component Hello World จะเห็นว่ามีเมนูย่อยเพิ่มเข้ามา
แนบไฟล์
categories1 (Small).JPG
categories1 (Small).JPG (25.35 KiB) Viewed 3381 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

คลิกเข้าไปที่ categories แล้ว คลิก New ด้านขวามือ
แนบไฟล์
categories2 (Small).JPG
categories2 (Small).JPG (29.4 KiB) Viewed 3381 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

ลองพิมพ์ข้อมูล Title ลงไปแล้ว Save & Close
แนบไฟล์
categories3 (Small).JPG
categories3 (Small).JPG (33.89 KiB) Viewed 3379 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

แล้วไปที่เมนู Messages แล้วคลิก New ด้านขวามือ
แนบไฟล์
categories4 (Small).JPG
categories4 (Small).JPG (25.48 KiB) Viewed 3378 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 22002
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

จะเห็นว่ามีตัว Option ให้เลือก
แนบไฟล์
categories5 (Small).JPG
categories5 (Small).JPG (30.41 KiB) Viewed 3378 times
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 75