Доброго времени суток. Сегодня я хочу продолжить серию статей по созданию компонента для CMS Joomla. Напомню, что в прошлой статье данного цикла мы остановились на добавлении категорий к нашему компоненту. Ну а сегодня мы рассмотрим добавление конфигурации компонента для CMS Joomla, которую можно изменять из админки.
Итак, у нас есть компонент из прошлого урока, Вы можете скачать его по этой ссылке. И мы будем расширять функционал именно этого компонента.
Добавление конфигурационных параметров.
Joomla позволяет хранить параметры каждого компонента. Для того, чтобы это реализовать необходимо в папке admin создать файл config.xml. И добавить в него следующий код:
<?xml version="1.0" encoding="utf-8"?>
<config>
<fieldset
name="greetings"
label="COM_HELLOWORLD_CONFIG_GREETING_SETTINGS_LABEL"
description="COM_HELLOWORLD_CONFIG_GREETING_SETTINGS_DESC"
>
<field
name="show_category"
type="radio"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_DESC"
default="0"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
</fieldset>
</config>
Этот файл будет прочитан компонентом com_config, который является компонентом ядра CMS Joomla. В нашем случае мы опрtделили только один параметр: отображать название категории или не отображать.
Теперь, чтобы вызвать окно настройки создадим в панели инструментов нашего компонента кнопку Настройка.
Добавление кнопки Настройка в панель инструментов.
Для того, чтобы добавить кнопку Настройка отредактируем файл admin/views/helloworlds/view.html.php следующим образом:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку View
jimport('joomla.application.component.view');
/**
* создаем класс HelloWorlds
*/
class HelloWorldViewHelloWorlds extends JView
{
function display($tpl = null)
{
// берем данные
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// проверяем на наличие ошибок
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Помещаем данные во view
$this->items = $items;
$this->pagination = $pagination;
// устанавливаем панель инструментов
$this->addToolBar();
// показываем шаблон
parent::display($tpl);
// Передаем установки title
$this->setDocument();
}
/**
* настраиваем панель инструментов
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'), 'helloworld');
JToolBarHelper::deleteListX('', 'helloworlds.delete');
JToolBarHelper::editListX('helloworld.edit');
JToolBarHelper::addNewX('helloworld.add');
JToolBarHelper::preferences('com_helloworld');
}
protected function setDocument()
{
$document = JFactory::getDocument();
$document->setTitle(JText::_('COM_HELLOWORLD_ADMINISTRATION'));
}
}
Используем параметры конфигурации по умолчанию.
Для того, чтобы установить параметры конфигурации по умолчанию, нам необходимо отредактировать файл admin/models/forms/helloworld.xml следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<form
addrulepath="/administrator/components/com_helloworld/models/rules"
>
<fieldset name="details">
<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>
<fields name="params">
<fieldset
name="params"
label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS"
>
<field
name="show_category"
type="list"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_DESC"
default=""
>
<option value="">JGLOBAL_USE_GLOBAL</option>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
</fieldset>
</fields>
</form>
Изменение SQL.
Нам необходимо изменить структуру таблицы базы данных. Теперь у нас есть дополнительное поле params. Изменим файл 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',
`params` TEXT NOT NULL DEFAULT '',
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/0.0.13.sql, который выполняется при обновлении нашего компонента:
ALTER TABLE `#__helloworld` ADD `params` VARCHAR(1024) NOT NULL DEFAULT '';
Также нам необходимо изменить TableHelloWorld для того, чтобы он начал использовать данное поле. Для реализации этого мы отредактируем файл admin/tables/helloworld.php:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку table
jimport('joomla.database.table');
/**
* Класс Hello Table
*/
class HelloWorldTableHelloWorld extends JTable
{
function __construct(&$db)
{
parent::__construct('#__helloworld', 'id', $db);
}
public function bind($array, $ignore = '')
{
if (isset($array['params']) && is_array($array['params']))
{
// Конвертируем параметры поля params в строку
$parameter = new JRegistry;
$parameter->loadArray($array['params']);
$array['params'] = (string)$parameter;
}
return parent::bind($array, $ignore);
}
public function load($pk = null, $reset = true)
{
if (parent::load($pk, $reset))
{
// Изменяем регистр поля params
$params = new JRegistry;
$params->loadJSON($this->params);
$this->params = $params;
return true;
}
else
{
return false;
}
}
}
Изменяем компонент в админке.
Для того, чтобы изменить наш компонент в админке необходимо отредактировать файл admin/views/helloworld/tmpl/edit.php следующим образом:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
$params = $this->form->getFieldsets('params');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form" class="form-validate">
<div class="width-60 fltlft">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset('details') as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</div>
<div class="width-40 fltrt">
<?php echo JHtml::_('sliders.start', 'helloworld-slider'); ?>
<?php foreach ($params as $name => $fieldset): ?>
<?php echo JHtml::_('sliders.panel', JText::_($fieldset->label), $name.'-params');?>
<?php if (isset($fieldset->description) && trim($fieldset->description)): ?>
<p class="tip"><?php echo $this->escape(JText::_($fieldset->description));?></p>
<?php endif;?>
<fieldset class="panelform" >
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset($name) as $field) : ?>
<li><?php echo $field->label; ?><?php echo $field->input; ?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<?php endforeach; ?>
<?php echo JHtml::_('sliders.end'); ?>
</div>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Изменение интерфейса.
Интерфейс необходимо изменить в соответствии с новым параметром. Для этого мы должны изменить модель: должна обьединить глобальные и индивидуальные параметры, она должна иметь доступ к категориям.
Для этого подправим следующий файл site/models/helloworld.php:
<?php
// Права доступа
defined('_JEXEC') or die('Restricted access');
// Загружаем библиотеку joomla.application.component.modelitem
jimport('joomla.application.component.modelitem');
/**
* Модель HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelItem
{
protected $item;
protected function populateState()
{
$app = JFactory::getApplication();
// получаем id сообщения
$id = JRequest::getInt('id');
$this->setState('message.id', $id);
// загружаем параметры
$params = $app->getParams();
$this->setState('params', $params);
parent::populateState();
}
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
public function getItem()
{
if (!isset($this->item))
{
$id = $this->getState('message.id');
$this->_db->setQuery($this->_db->getQuery(true)
->from('#__helloworld as h')
->leftJoin('#__categories as c ON h.catid=c.id')
->select('h.greeting, h.params, c.title as category')
->where('h.id=' . (int)$id));
if (!$this->item = $this->_db->loadObject())
{
$this->setError($this->_db->getError());
}
else
{
// загружаем строку JSON
$params = new JRegistry;
$params->loadJSON($this->item->params);
$this->item->params = $params;
// применяем глобальные параметры
$params = clone $this->getState('params');
$params->merge($this->item->params);
$this->item->params = $params;
}
}
return $this->item;
}
}
Вид должен запрашивать у модели данной категории. Для этого изменим файл site/views/helloworld/view.html.php
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
// импорт библиотеки контроллеров joomla
jimport('joomla.application.component.view');
/**
* HTML представление класса для компонента HelloWorld
*/
class HelloWorldViewHelloWorld extends JView
{
// Перезаписываем JView метод display
function display($tpl = null)
{
// Назначаем данные для просмотра
$this->item = $this->get('Item');
// проверяем на ошибки
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Показываем представление
parent::display($tpl);
}
}
Теперь наше представление может корректно отображать сообщение с категорией или не отображать.
Отредактируем файл site/views/helloworld/tmpl/default.php
<?php
// защита доступа
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->item->greeting.(($this->item->category and $this->item->params->get('show_category'))
? (' ('.$this->item->category.')') : ''); ?>
</h1>
На этом все, осталось изменить файл описания.
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">
<name>Hello World!</name>
<!-- Данные о разработчике -->
<creationDate>2012</creationDate>
<author>zloykolobok</author>
<authorEmail></authorEmail>
<authorUrl>http://zloykolobok.blogspot.com</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- Версия продукта-->
<version>0.0.13</version>
<!-- Описание компонента-->
<description>Продолжение статей по созданию расширений для CMS Joomla</description>
<install> <!--Выполняется при установке -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- Выполняется при удалении-->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- Выполняется при обновлении. Данная функция появиласть с версии 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Копирование файлов в секцию site-->
<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 создается папка com_helloworld и туда производиться копирование media-файлов-->
<media destination="com_helloworld" folder="media">
<filename>index.html</filename>
<folder>images</folder>
</media>
<administration>
<!-- меню в административном разделе-->
<menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>config.xml</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!-- папка для SQL файлов -->
<folder>sql</folder>
<!-- папка для table-файлов -->
<folder>tables</folder>
<!-- models files section -->
<folder>models</folder>
<!-- папка для views-файлов -->
<folder>views</folder>
<!--папка для controller-файлов-->
<folder>controllers</folder>
<!-- папка для helpers-файлов-->
<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>
</languages>
</administration>
</extension>
Теперь мы можем изменять конфигурацию нашего компонента: показывать или не показывать категории в компоненте. Скачать исходник данного поста Вы можете по этой ссылке.
Если Вам нравятся статьи данного блога, то подпишитесь на RSS-рассылку данного блога.
А на этом все, всем удачной разработки на CMS Joomla.
Итак, у нас есть компонент из прошлого урока, Вы можете скачать его по этой ссылке. И мы будем расширять функционал именно этого компонента.
Добавление конфигурационных параметров.
Joomla позволяет хранить параметры каждого компонента. Для того, чтобы это реализовать необходимо в папке admin создать файл config.xml. И добавить в него следующий код:
<?xml version="1.0" encoding="utf-8"?>
<config>
<fieldset
name="greetings"
label="COM_HELLOWORLD_CONFIG_GREETING_SETTINGS_LABEL"
description="COM_HELLOWORLD_CONFIG_GREETING_SETTINGS_DESC"
>
<field
name="show_category"
type="radio"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_DESC"
default="0"
>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
</fieldset>
</config>
Этот файл будет прочитан компонентом com_config, который является компонентом ядра CMS Joomla. В нашем случае мы опрtделили только один параметр: отображать название категории или не отображать.
Теперь, чтобы вызвать окно настройки создадим в панели инструментов нашего компонента кнопку Настройка.
Добавление кнопки Настройка в панель инструментов.
Для того, чтобы добавить кнопку Настройка отредактируем файл admin/views/helloworlds/view.html.php следующим образом:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку View
jimport('joomla.application.component.view');
/**
* создаем класс HelloWorlds
*/
class HelloWorldViewHelloWorlds extends JView
{
function display($tpl = null)
{
// берем данные
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// проверяем на наличие ошибок
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Помещаем данные во view
$this->items = $items;
$this->pagination = $pagination;
// устанавливаем панель инструментов
$this->addToolBar();
// показываем шаблон
parent::display($tpl);
// Передаем установки title
$this->setDocument();
}
/**
* настраиваем панель инструментов
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'), 'helloworld');
JToolBarHelper::deleteListX('', 'helloworlds.delete');
JToolBarHelper::editListX('helloworld.edit');
JToolBarHelper::addNewX('helloworld.add');
JToolBarHelper::preferences('com_helloworld');
}
protected function setDocument()
{
$document = JFactory::getDocument();
$document->setTitle(JText::_('COM_HELLOWORLD_ADMINISTRATION'));
}
}
Используем параметры конфигурации по умолчанию.
Для того, чтобы установить параметры конфигурации по умолчанию, нам необходимо отредактировать файл admin/models/forms/helloworld.xml следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<form
addrulepath="/administrator/components/com_helloworld/models/rules"
>
<fieldset name="details">
<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>
<fields name="params">
<fieldset
name="params"
label="JGLOBAL_FIELDSET_DISPLAY_OPTIONS"
>
<field
name="show_category"
type="list"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_SHOW_CATEGORY_DESC"
default=""
>
<option value="">JGLOBAL_USE_GLOBAL</option>
<option value="0">JHIDE</option>
<option value="1">JSHOW</option>
</field>
</fieldset>
</fields>
</form>
Изменение SQL.
Нам необходимо изменить структуру таблицы базы данных. Теперь у нас есть дополнительное поле params. Изменим файл 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',
`params` TEXT NOT NULL DEFAULT '',
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/0.0.13.sql, который выполняется при обновлении нашего компонента:
ALTER TABLE `#__helloworld` ADD `params` VARCHAR(1024) NOT NULL DEFAULT '';
Также нам необходимо изменить TableHelloWorld для того, чтобы он начал использовать данное поле. Для реализации этого мы отредактируем файл admin/tables/helloworld.php:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку table
jimport('joomla.database.table');
/**
* Класс Hello Table
*/
class HelloWorldTableHelloWorld extends JTable
{
function __construct(&$db)
{
parent::__construct('#__helloworld', 'id', $db);
}
public function bind($array, $ignore = '')
{
if (isset($array['params']) && is_array($array['params']))
{
// Конвертируем параметры поля params в строку
$parameter = new JRegistry;
$parameter->loadArray($array['params']);
$array['params'] = (string)$parameter;
}
return parent::bind($array, $ignore);
}
public function load($pk = null, $reset = true)
{
if (parent::load($pk, $reset))
{
// Изменяем регистр поля params
$params = new JRegistry;
$params->loadJSON($this->params);
$this->params = $params;
return true;
}
else
{
return false;
}
}
}
Изменяем компонент в админке.
Для того, чтобы изменить наш компонент в админке необходимо отредактировать файл admin/views/helloworld/tmpl/edit.php следующим образом:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
$params = $this->form->getFieldsets('params');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form" class="form-validate">
<div class="width-60 fltlft">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset('details') as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</div>
<div class="width-40 fltrt">
<?php echo JHtml::_('sliders.start', 'helloworld-slider'); ?>
<?php foreach ($params as $name => $fieldset): ?>
<?php echo JHtml::_('sliders.panel', JText::_($fieldset->label), $name.'-params');?>
<?php if (isset($fieldset->description) && trim($fieldset->description)): ?>
<p class="tip"><?php echo $this->escape(JText::_($fieldset->description));?></p>
<?php endif;?>
<fieldset class="panelform" >
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset($name) as $field) : ?>
<li><?php echo $field->label; ?><?php echo $field->input; ?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<?php endforeach; ?>
<?php echo JHtml::_('sliders.end'); ?>
</div>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Изменение интерфейса.
Интерфейс необходимо изменить в соответствии с новым параметром. Для этого мы должны изменить модель: должна обьединить глобальные и индивидуальные параметры, она должна иметь доступ к категориям.
Для этого подправим следующий файл site/models/helloworld.php:
<?php
// Права доступа
defined('_JEXEC') or die('Restricted access');
// Загружаем библиотеку joomla.application.component.modelitem
jimport('joomla.application.component.modelitem');
/**
* Модель HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelItem
{
protected $item;
protected function populateState()
{
$app = JFactory::getApplication();
// получаем id сообщения
$id = JRequest::getInt('id');
$this->setState('message.id', $id);
// загружаем параметры
$params = $app->getParams();
$this->setState('params', $params);
parent::populateState();
}
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
public function getItem()
{
if (!isset($this->item))
{
$id = $this->getState('message.id');
$this->_db->setQuery($this->_db->getQuery(true)
->from('#__helloworld as h')
->leftJoin('#__categories as c ON h.catid=c.id')
->select('h.greeting, h.params, c.title as category')
->where('h.id=' . (int)$id));
if (!$this->item = $this->_db->loadObject())
{
$this->setError($this->_db->getError());
}
else
{
// загружаем строку JSON
$params = new JRegistry;
$params->loadJSON($this->item->params);
$this->item->params = $params;
// применяем глобальные параметры
$params = clone $this->getState('params');
$params->merge($this->item->params);
$this->item->params = $params;
}
}
return $this->item;
}
}
Вид должен запрашивать у модели данной категории. Для этого изменим файл site/views/helloworld/view.html.php
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
// импорт библиотеки контроллеров joomla
jimport('joomla.application.component.view');
/**
* HTML представление класса для компонента HelloWorld
*/
class HelloWorldViewHelloWorld extends JView
{
// Перезаписываем JView метод display
function display($tpl = null)
{
// Назначаем данные для просмотра
$this->item = $this->get('Item');
// проверяем на ошибки
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Показываем представление
parent::display($tpl);
}
}
Теперь наше представление может корректно отображать сообщение с категорией или не отображать.
Отредактируем файл site/views/helloworld/tmpl/default.php
<?php
// защита доступа
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->item->greeting.(($this->item->category and $this->item->params->get('show_category'))
? (' ('.$this->item->category.')') : ''); ?>
</h1>
На этом все, осталось изменить файл описания.
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">
<name>Hello World!</name>
<!-- Данные о разработчике -->
<creationDate>2012</creationDate>
<author>zloykolobok</author>
<authorEmail></authorEmail>
<authorUrl>http://zloykolobok.blogspot.com</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- Версия продукта-->
<version>0.0.13</version>
<!-- Описание компонента-->
<description>Продолжение статей по созданию расширений для CMS Joomla</description>
<install> <!--Выполняется при установке -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- Выполняется при удалении-->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- Выполняется при обновлении. Данная функция появиласть с версии 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Копирование файлов в секцию site-->
<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 создается папка com_helloworld и туда производиться копирование media-файлов-->
<media destination="com_helloworld" folder="media">
<filename>index.html</filename>
<folder>images</folder>
</media>
<administration>
<!-- меню в административном разделе-->
<menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>config.xml</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!-- папка для SQL файлов -->
<folder>sql</folder>
<!-- папка для table-файлов -->
<folder>tables</folder>
<!-- models files section -->
<folder>models</folder>
<!-- папка для views-файлов -->
<folder>views</folder>
<!--папка для controller-файлов-->
<folder>controllers</folder>
<!-- папка для helpers-файлов-->
<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>
</languages>
</administration>
</extension>
Теперь мы можем изменять конфигурацию нашего компонента: показывать или не показывать категории в компоненте. Скачать исходник данного поста Вы можете по этой ссылке.
Если Вам нравятся статьи данного блога, то подпишитесь на RSS-рассылку данного блога.
А на этом все, всем удачной разработки на CMS Joomla.
В 12-ой части у вас серьезная ошибка, и в 13-ой она не исправлена, проверте ваши коды еще раз
ОтветитьУдалитьЕсли Вам не сложно уточните где именно Вы заметили грубую ошибку.
Удалитьустановите зип архив, который вы предоставили для скачивания и попробуйте прикрутить его к меню, ну или если у вас уже создан для этого пунк меню, попробуйте его отредактировать
Удалитьошибка кроется в обращении к базе данных