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

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

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

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

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

Post by tsukasaz »

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

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

Code: Select all

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

Code: Select all

ALTER TABLE `#__helloworld` ADD `catid` int(11) NOT NULL DEFAULT '0'
เข้าไปที่โฟลเดอร์ 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_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

Code: Select all

<?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

Code: Select all

<?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

Code: Select all

<?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

Code: Select all

<?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

Code: Select all

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
และแก้

Code: Select all

<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>
เป็น

Code: Select all

<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 เข้าไปใหม่
Last edited by tsukasaz on 11/05/2012 4:39 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: 11751
Joined: 18/04/2012 9:39 am

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

Post by tsukasaz »

เข้าไปในหน้าของ component Hello World จะเห็นว่ามีเมนูย่อยเพิ่มเข้ามา
Attachments
categories1 (Small).JPG
categories1 (Small).JPG (25.35 KiB) Viewed 2668 times
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: 11751
Joined: 18/04/2012 9:39 am

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

Post by tsukasaz »

คลิกเข้าไปที่ categories แล้ว คลิก New ด้านขวามือ
Attachments
categories2 (Small).JPG
categories2 (Small).JPG (29.4 KiB) Viewed 2668 times
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: 11751
Joined: 18/04/2012 9:39 am

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

Post by tsukasaz »

ลองพิมพ์ข้อมูล Title ลงไปแล้ว Save & Close
Attachments
categories3 (Small).JPG
categories3 (Small).JPG (33.89 KiB) Viewed 2666 times
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: 11751
Joined: 18/04/2012 9:39 am

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

Post by tsukasaz »

แล้วไปที่เมนู Messages แล้วคลิก New ด้านขวามือ
Attachments
categories4 (Small).JPG
categories4 (Small).JPG (25.48 KiB) Viewed 2665 times
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: 11751
Joined: 18/04/2012 9:39 am

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

Post by tsukasaz »

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

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Share Knowledge”

Who is online

Users browsing this forum: No registered users and 3 guests