การสร้าง Component สำหรับ Joomla 3 เขียน คอมโพเน้นท์ ใช้เอง
ในบทวามนี้จะเป็นการแนะนำการสร้าง Joomla Component ที่สามารถเรียกใช้งานได้หลาย Controllers ในตัวอย่างนี้จะมี Controller อยู่สองตัวคือ A และ B
สำหรับมือใหม่แนะนำให้อ่านเรื่อง OOP และ ควรมีความรู้เรื่อง MVC
1. สร้างโฟลเดอร์ชื่อ com_hellocomponent (ต้องขึ้นต้นด้วย com_ และตามด้วยชื่อของ Component)
2. สร้างไฟล์ ที่จำเป็นในการใช้ Component Joomla
2.1 สร้างไฟล์ hellomindphp.php ซึ่งจะเป็นไฟล์เริ่มต้นสำหรับเรียกใช้ Component (ต้องตั้งชื่อไฟล์ให้ตรงกับชื่อ Component)
Code ของไฟล์ hellomindphp.php
<?php
/**
* @package HelloComponent
* @subpackage com_hellocomponent
* @author Mindphp Developer Teams
* @copyright Copyright (C) 2021 Mindphp. All rights reserved..
* @license GNU General Public License version 2 or later;
*/
defined('_JEXEC') or die();
JHtml::_('behavior.tabstate');
$controller = JControllerLegacy::getInstance('HelloComponent');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
คำอธิบายการทำงานของโค้ด
-
ป้องกันการเรียกใช้งานไฟล์แบบตรง ๆdefined('_JEXEC') or die;
-
เรียกใช้งาน Controller ของ com_hellocomponent$controller = JControllerLegacy::getInstance('Hellocomponent');
-
ตรวจสอบ task จาก Url ซึ่ง task นั้นจะเป็นตัวกำหนดว่าจะเรียกใช้งาน Method ไหนใน Object$controller->execute(JFactory::getApplication()->input->get('task'));
2.2 สร้างโฟลเดอร์ language และโฟลเดอร์ภาษา (โฟลเดอร์ภาษา เช่น ภาษาไทย คือ โฟลเดอร์ th-TH และภาษาอังกฤษ คือ โฟลเดอร์ en-GB ) ซึ่งในโฟลเดอร์ภาษา การสร้างจะนำหน้าด้วยภาษา ก็มีไฟล์ ดังนี้
2.2.1 ไฟล์ en-GB.com_hellocomponent.ini
COM_HELLOCOMPONENT = "Hello Componect"
COM_HELLOCOMPONENT_XML_DESCRIPTION = "This is hello componect."
COM_HELLOCOMPONENT_A = "Hello Componect Test A"
COM_HELLOCOMPONENT_B = "Hello Componect Test B"
COM_HELLOCOMPONENT_CONTROL_PANEL = "Hello Componect Control Panel"
2.2.2 ไฟล์ en-GB.com_hellocomponent.sys.ini
COM_HELLOCOMPONENT = "Hello Componect"
COM_HELLOCOMPONENT_XML_DESCRIPTION = "This is hello componect."
2.3 access.xml คือ ไฟล์เป็นส่วนกำหนดสิทธิ์ user
<?xml version="1.0" encoding="utf-8" ?>
<access component="com_hellocomponent">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.options" title="JACTION_OPTIONS" description="JACTION_OPTIONS_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
<action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
<action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
<action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" />
</section>
</access>
2.4 config.xml คือ ไฟล์กำหนดค่า config
<?xml version="1.0" encoding="utf-8"?>
<config>
<fieldset
name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC"
>
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
filter="rules"
validate="rules"
component="com_hellocomponent"
section="component"
/>
</fieldset>
</config>
บทต่อไปเป็นเรื่อง ของ Controller