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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: สร้าง Component สำหรับ Joomla 2.5 การเพิ่มหมวดหมู่

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

โดย tsukasaz » 11/05/2012 1:14 pm

จะเห็นว่ามีตัว Option ให้เลือก
แนบไฟล์
categories5 (Small).JPG
categories5 (Small).JPG (30.41 KiB) Viewed 3378 times

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

โดย tsukasaz » 11/05/2012 1:10 pm

แล้วไปที่เมนู Messages แล้วคลิก New ด้านขวามือ
แนบไฟล์
categories4 (Small).JPG
categories4 (Small).JPG (25.48 KiB) Viewed 3378 times

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

โดย tsukasaz » 11/05/2012 1:07 pm

ลองพิมพ์ข้อมูล Title ลงไปแล้ว Save & Close
แนบไฟล์
categories3 (Small).JPG
categories3 (Small).JPG (33.89 KiB) Viewed 3379 times

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

โดย tsukasaz » 11/05/2012 1:04 pm

คลิกเข้าไปที่ categories แล้ว คลิก New ด้านขวามือ
แนบไฟล์
categories2 (Small).JPG
categories2 (Small).JPG (29.4 KiB) Viewed 3381 times

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

โดย tsukasaz » 11/05/2012 1:01 pm

เข้าไปในหน้าของ component Hello World จะเห็นว่ามีเมนูย่อยเพิ่มเข้ามา
แนบไฟล์
categories1 (Small).JPG
categories1 (Small).JPG (25.35 KiB) Viewed 3381 times

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

โดย tsukasaz » 11/05/2012 12:58 pm

ตอนนี้เราจะเพิ่มหมวดหมู่ให้กับ 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 เข้าไปใหม่

ข้างบน