قابلیت دسته بندی اطلاعات
آموزش اضافه کردن قابلیت دسته بندی اطلاعات در جوملا
با استفاده از framework جوملا می توانید داده های مورد استفاده در تمام کامپوننت ها را دسته بندی (category) کنید.
اضافه کردن قابلییت دسته بندی، کار بسیار راحتی است.
در پایان این آموزش خواهید توانست
بعد از نصب این قسمت از آموزش، خواهید دید که:
دسته بندی اطلاعات در جوملا
1- از منوی کامپوننت ها، روی گزینه "کامپوننت احوال پرسی" کلیک کنید.
مطابق شکل زیر، دو زیر منوی "پیام های احوال پرسی" و "مجموعه های احوال پرسی" در بالای کامپوننت اضافه شده است. زمانی که روی منوی "مجموعه های احوال پرسی" کلیک کنید می توانید دسته بندی ها مورد نظر خود را ایجاد، ویرایش و حذف نمایید.
2- اضافه شدن فیلد مجموعه
مطابق شکل زیر، زمانی که وارد فرم ویرایش یکی از پیام های احوال پرسی شوید، فیلد مجوعه به این فرم اضافه شده است.
فایل نصب کامپوننت
در فایل نصب کامپوننت، قسمت های قرمز رنگ مطابق شکل زیر، اضافه یا تغییر خواهند کرد:
توجه: در انتهای این بیاموز، فایل نصب کامپوننت برای دانلود قرار داده شده است.
اضافه کردن قابلییت دسته بندی داده ها در 8 مرحله
- اصلاح جداول کامپوننت
- اصلاح فایل XML فرم ویرایش
- اصلاح نوع منو، هنگام ایجاد منو
- اضافه کردن زیرمنوی "پیام ها" و "مجموعه های احوال پرسی" در بالای کامپوننت
- فراخوانی تابع ()addSubmenu
- اضافه کردن دکمه های "جدید"، "ویرایش" و ... در viewی مجموعه های احوال پرسی
- اضافه کردن helper به کامپوننت
- اصلاح فایل helloworld.xml
مرحله 1- اصلاح جداول کامپوننت
به منظور مدیریت مجموعه ها، باید جداول SQL کامپوننت احوال پرسی را تغییر دهیم.
با ویرایشگر دلخواهتان فایل admin/sql/install.mysql.utf8.sql را مطابق زیر اصلاح فرمایید:
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!');
اگر کامپوننت از ابتدا نصب نشود، و کاربر قصد به روز رسانی کامپوننت را داشته باشد، با توجه به نسخه نصبی کامپوننت، فایلی که در آدرس admin/sql/updates/mysql قرار دارد اجرا خواهد شد.
فایل admin/sql/updates/mysql/0.0.12.sql با محتوای زیر را ایجاد نمایید:
admin/sql/updates/mysql/0.0.12.sql
ALTER TABLE `#__helloworld` ADD `catid` int(11) NOT NULL DEFAULT '0';
مرحله 2- اصلاح فایل XML فرم ویرایش
پیام احوال پرسی، حالا می تواند جزو یک مجموعه (category) باشد. در واقع زمان ویرایش و یا اضافه کردن پیام می توانید، فیلد مجموعه را تنظیم نمایید.
اگر این آموزش را از ابتدا دنبال فرموده باشید، فقط کافی است تغییرات زیر را در فایل xml فرم ویرایش اعمال نمایید: (رنگ سبز)
admin/models/forms/helloworld.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: helloworld.xml 51 2010-11-22 01:33:21Z chdemko $ -->
<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>
توجه: مقدار مجموعه (category) می تواند با 0 تنظیم شود که نشان دهنده این است که رکورد مورد نظر مجموعه ندارد.
در فایل زبان دو رشته استفاده شده در بالا را اضافه کنید:
admin\language\fa-IR\fa-IR.com_helloworld.ini
COM_HELLOWORLD_ADMINISTRATION="کامپوننت احوال پرسی - مدیریت"
COM_HELLOWORLD_HELLOWORLD_CREATING="کامپوننت احوال پرسی - ایجاد"
COM_HELLOWORLD_HELLOWORLD_EDITING="کامپوننت احوال پرسی - ویرایش"
COM_HELLOWORLD_HELLOWORLD_DETAILS="جزئیات"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="لطفاً پیام مورد نظرتان را انتخاب نمایید"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="انتخاب پیام"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="متن احوال پرسی"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="شناسه"
COM_HELLOWORLD_MANAGER_HELLOWORLDS="مدیریت کامپوننت احوال پرسی"
COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW="مدیریت کامپوننت احوال پرسی: ثبت یک پیام"
COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT="مدیریت کامپوننت احوال پرسی: ویرایش یک پیام"
COM_HELLOWORLD_N_ITEMS_DELETED_1="یک پیغام حذف شد"
COM_HELLOWORLD_N_ITEMS_DELETED_MORE="%d پیام حذف شد"
COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL="پیام"
COM_HELLOWORLD_HELLOWORLD_GREETING_DESC="لطفاً پیام مورد نظرتان را وارد کنید"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_DESC="مجموعه ای که این پیام در آن قرار می گیرد"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_LABEL="مجموعه"
مرحله 3- اصلاح نوع منو، هنگام ایجاد منو
اگر به خاطر داشته باشید هنگام ایجاد منو از نوع "احوال پرسی"، باید از لیست پیام های احوال پرسی یکی را برای نمایش انتخاب کنید، حالا می خواهیم اگر برای پیام، مجموعه ای تنظیم شده است، عنوان آن مجموعه نیز در دراپ دان لیست نمایش داده شود.
در فایل admin/models/fields/helloworld.php تغییرات زیر را اعمال فرمایید:
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;
$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;
}
}
حالا عنوان مجموعه در ادامه پیام، داخل پرانتز نمایش داده می شود.
مرحله 4- اضافه کردن زیرمنوی "پیام ها" و "مجموعه های احوال پرسی" در بالای کامپوننت
اگر می خواهید به کامپوننت تان زیرمنو اضافه کنید، بهتر است این کار را از طریق helperها انجام دهید. با استفاده از یک helper دو زیرمنو زیر را به کامپوننت احوال پرسی اضافه می کنیم:
- پیام های احوال پرسی (index.php?option=com_helloworld)
- مجموعه های احوال پرسی (index.php?option=com_categories&view=categories&extension=com_helloworld)
برای مدیریت مجموعه های احوال پرسی می توانید از کامپوننت com_categories استفاده کنید.
با ویرایشگر دلخواهتان فایل زیر را ایجاد نمایید:
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'));
}
}
}
توجه: برای نامگذاری helperها باید از نام کامپوننت (بدون _com) استفاده نمایید، وگرنه زیرمنوها در ویوی category نمایش داده نخواهد شد.
تابع ()addSubmenu، بصورت اتوماتیک توسط کامپوننت com_categories صدا زده خواهد شد.
عملیات تابع ()addSubmenu:
- تابع ()addSubmenu، دو زیرمنو اضافه خواهد کرد.
- تابع ()addSubmenu، برای نمایش آیکن ها، تعدادی خصوصیت CSS را تنظیم می کند.
- اگر زیرمنوی categories انتخاب شود، عنوان در بالای مرورگر تغییر خواهد کرد.
- عنوان را تغییر می دهد و یک دکمه preference اضافه خواهد کرد.
در فایل زبان سه رشته استفاده شده در بالا را اضافه کنید:
admin\language\fa-IR\fa-IR.com_helloworld.ini
COM_HELLOWORLD_ADMINISTRATION="کامپوننت احوال پرسی - مدیریت"
COM_HELLOWORLD_HELLOWORLD_CREATING="کامپوننت احوال پرسی - ایجاد"
COM_HELLOWORLD_HELLOWORLD_EDITING="کامپوننت احوال پرسی - ویرایش"
COM_HELLOWORLD_HELLOWORLD_DETAILS="جزئیات"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="لطفاً پیام مورد نظرتان را انتخاب نمایید"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="انتخاب پیام"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="متن احوال پرسی"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="شناسه"
COM_HELLOWORLD_MANAGER_HELLOWORLDS="مدیریت کامپوننت احوال پرسی"
COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW="مدیریت کامپوننت احوال پرسی: ثبت یک پیام"
COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT="مدیریت کامپوننت احوال پرسی: ویرایش یک پیام"
COM_HELLOWORLD_N_ITEMS_DELETED_1="یک پیغام حذف شد"
COM_HELLOWORLD_N_ITEMS_DELETED_MORE="%d پیام حذف شد"
COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL="پیام"
COM_HELLOWORLD_HELLOWORLD_GREETING_DESC="لطفاً پیام مورد نظرتان را وارد کنید"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_DESC="مجموعه ای که این پیام در آن قرار می گیرد"
COM_HELLOWORLD_HELLOWORLD_FIELD_CATID_LABEL="مجموعه"
COM_HELLOWORLD_SUBMENU_MESSAGES="پیام های احوال پرسی"
COM_HELLOWORLD_SUBMENU_CATEGORIES="مجموعه های احوال پرسی"
COM_HELLOWORLD_ADMINISTRATION_CATEGORIES="کامپوننت احوال پرسی - مدیریت مجموعه"
مرحله 5- فراخوانی تابع ()addSubmenu
برای فراخوانی تابع ()addSubmenu، باید از کنترلر اصلی کامپوننت اقدام نمایید.
بنابراین فایل admin/controller.php را بصورت زیر تغییر دهید:
admin/controller.php
<?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('hellowords');
}
}
مرحله 6- اضافه کردن دکمه های "جدید"، "ویرایش" و ... در viewی مجموعه های احوال پرسی
بصورت پیشفرض، دسترسی ایجاد، ویرایش و حذف مجموعه وجود ندارد، بنابراین باید در فایل نصب کامپوننت و در شاخه admin فایل زیر را اضافه نمایید:
admin/access.xml
<?xml version="1.0" encoding="utf-8" ?>
<access component="com_helloworld">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_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" />
</section>
<section name="message">
<action name="core.delete" title="JACTION_DELETE" description="COM_HELLOWORD_ACCESS_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_OLA_HELLOWORD_EDIT_DESC" />
</section>
</access>
توجه: اگر این فایل را به کامپوننت اضافه نکنید، دکمه های "جدید"، "ویرایش" و ... در ویوی category نمایش داده نخواهد شد.
درباره سطح دسترسی (ACL) در مطلب بعدی بیشتر توضیح داده خواهد شد.
مرحله 7- اضافه کردن helper به کامپوننت
برای اضافه کردن helper به کامپوننت سمت مدیریت، می توانید از طریق فایل شروع کامپوننت یعنی admin/helloworld.php اقدام نمایید:
admin/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();
مرحله 8- اصلاح فایل helloworld.xml
اگر این آموزش را از ابتدا دنبال فرموده باشید، فقط کافی است تغییرات زیر را در فایل xml، اعمال نمایید: (رنگ سبز)
helloworld.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- $Id: helloworld.xml 14 2009-11-02 18:35:20Z chdemko $ -->
<extension type="component" version="1.6.0" method="upgrade">
<name>COM_HELLOWORLD</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>November 2009</creationDate>
<author>beyamooz</author>
<authorEmail>این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید</authorEmail>
<authorUrl>https://beyamooz.com</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.12</version>
<!-- The description is optional and defaults to the name -->
<description>COM_HELLOWORLD_DESCRIPTION</description>
<install> <!-- Runs on install -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- Runs on uninstall -->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
<folder>language</folder>
</files>
<media destination="com_helloworld" folder="media">
<filename>index.html</filename>
<folder>images</folder>
</media>
<administration>
<!-- Administration Menu Section -->
<menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<filename>access.xml</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>
<languages folder="admin">
<language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
<language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
<language tag="fa-IR">language/fa-IR/fa-IR.com_helloworld.ini</language>
<language tag="fa-IR">language/fa-IR/fa-IR.com_helloworld.sys.ini</language>
</languages>
</administration>
</extension>
دریافت فایل کامپوننت آموزشی Hello World (بخش یازدهم - قابلییت دسته بندی داده ها)
- ایجاد کننده:www.beyamooz.com
- خرید فایل:دانلود فایل کامپوننت Hello World
- حجم فایل: 4 کیلو بایت
- قیمت: 1000 تومان
تمام درآمدها صرف پیشرفت بیاموز خواهد شد.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 7289
دیدگاهها
خط
HelloWorldHelper::addSubmenu('messages');
اشتباهه به جای messages شما باید نام یک ویو رو درج کنید که در اینجا ما ویویی به نام messages نداریم پس باید اصلاح بشه و به جای messages بشه helloworlds