Доброго времени суток. И мы с Вами продолжаем создавать расширение для CMS Joomla. Сегодня мы остановимся на рассмотрении actions в админ панели нашего расширения. В данной статье мы добавим стандартную панель инструментов к компоненту. Ведь администратор сайта на CMS Joomla в основном работает с компонентами через панель инструментов. Поэтому создание панели инструментов в управлении компонентов является важной задачей. А также нам необходимо создать и обработчики событий для данной панели. Ну, что ж цель есть, тогда приступим...
Дописывать будем расширение, которое создали в статье “Создание расширения для CMS Joomla 1.7. Часть 8. Добавление языков.”, скачать исходник Вы можете по этой ссылке.
Добавление панели инструментов к расширению для CMS Joomla.
Давайте добавим панель управления для нашего компонента. Для этого в файле admin/views/helloworlds/view.html.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем Joomla view библиотеку
jimport('joomla.application.component.view');
/**
* Описываем HelloWorls View
*/
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;
}
// Назначаем данные
$this->items = $items;
$this->pagination = $pagination;
// Устанавливаем панель инструментов
$this->addToolBar();
// Отображаем шаблон
parent::display($tpl);
}
/**
* Описываем панель инструментов
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'));
JToolBarHelper::deleteList('', 'helloworlds.delete');
JToolBarHelper::editList('helloworld.edit');
JToolBarHelper::addNew('helloworld.add');
}
}
Думаю, тут код не надо сильно описывать. Все понятно.
Теперь в файле admin/views/helloworlds/tmpl/default.php изменим следующим образом код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted Access');
// загружаем подсказку поведения
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm" id="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
<div>
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Итак, панель инструментов мы добавили. Но она пока ничего не делает. Для этого нам надо добавить три контроллера.
Добавление контроллеров для обработки событий панели управления.
Нам нужно добавить три контроллера:
Создадим наши контроллеры, в файле admin/controllers/helloworlds.php добавим следующий код:
<?php
//проверка доступа
defined('_JEXEC') or die('Restricted access');
//импортируем библиотеку Joomla controlleradmin
jimport('joomla.application.component.controlleradmin');
/**
* Контроллер HelloWorld
*/
class HelloWorldControllerHelloWorlds extends JControllerAdmin
{
public function getModel($name = 'HelloWorld', $prefix = 'HelloWorldModel')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
Теперь в файл admin/controllers/helloworld.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// iимпортируем библиотеку Joomla controllerform
jimport('joomla.application.component.controllerform');
/**
* Контроллер HelloWorld
*/
class HelloWorldControllerHelloWorld extends JControllerForm
{
}
Теперь нужно создать шаблон для редактирования.
Создание отображения редактирования компонента.
Для создания отображения в файле admin/views/helloworld/view.html.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку Joomla view
jimport('joomla.application.component.view');
/**
* отображение HelloWorld
*/
class HelloWorldViewHelloWorld extends JView
{
public function display($tpl = null)
{
// получаем данные
$form = $this->get('Form');
$item = $this->get('Item');
// проверяем на наличеи ошибок
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// назначаем данные
$this->form = $form;
$this->item = $item;
// устанавливаем панель инструментов
$this->addToolBar();
// показываем шаблон
parent::display($tpl);
}
/**
* Настройки панели управления
*/
protected function addToolBar()
{
JRequest::setVar('hidemainmenu', true);
$isNew = ($this->item->id == 0);
JToolBarHelper::title($isNew ? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW')
: JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'));
JToolBarHelper::save('helloworld.save');
JToolBarHelper::cancel('helloworld.cancel', $isNew ? 'JTOOLBAR_CANCEL'
: 'JTOOLBAR_CLOSE');
}
}
Дальше создадим файла admin/views/helloworld/tmpl/edit.php и поместим туда следующий код:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Отлично, это сделали. Но наша форма читает данные из модели и записывает данные в модель. А эта модель использует getTable и getForm, а также loadData. Нам нужно изменить нашу модель и описать форму.
Создание модели для расширения.
Для этого изменим файл admin/models/helloworld.php следующим образом:
<?php
//проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку Joomla modeladmin
jimport('joomla.application.component.modeladmin');
/**
* Модель HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelAdmin
{
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_helloworld.helloworld', 'helloworld',
array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
protected function loadFormData()
{
// проверка раннее введенных данных
$data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
Наша модель унаследована от JModelAdmin и использует его метод loadForm. А этот метод ищет файл с формой в папке admin/models/forms/ Поэтому давайте создадим файл admin/models/forms/helloworld.xml и поместим туда следующий код:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="greeting"
type="text"
label="COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_GREETING_DESC"
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>
На этом все, осталось только изменить файл описания нашего компонента:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.7.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.9</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>
<administration>
<!-- меню в административном разделе-->
<menu>COM_HELLOWORLD_MENU</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!-- папка для SQL файлов -->
<folder>sql</folder>
<!-- папка для table-файлов -->
<folder>tables</folder>
<!-- папка для model-файлов-->
<folder>models</folder>
<!-- папка для views-файлов -->
<folder>views</folder>
<!--папка для controller-файлов-->
<folder>controllers</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-рассылку данного блога или найти меня в twitter.
Всем удачной разработки.
Дописывать будем расширение, которое создали в статье “Создание расширения для CMS Joomla 1.7. Часть 8. Добавление языков.”, скачать исходник Вы можете по этой ссылке.
Добавление панели инструментов к расширению для CMS Joomla.
Давайте добавим панель управления для нашего компонента. Для этого в файле admin/views/helloworlds/view.html.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем Joomla view библиотеку
jimport('joomla.application.component.view');
/**
* Описываем HelloWorls View
*/
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;
}
// Назначаем данные
$this->items = $items;
$this->pagination = $pagination;
// Устанавливаем панель инструментов
$this->addToolBar();
// Отображаем шаблон
parent::display($tpl);
}
/**
* Описываем панель инструментов
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'));
JToolBarHelper::deleteList('', 'helloworlds.delete');
JToolBarHelper::editList('helloworld.edit');
JToolBarHelper::addNew('helloworld.add');
}
}
Думаю, тут код не надо сильно описывать. Все понятно.
Теперь в файле admin/views/helloworlds/tmpl/default.php изменим следующим образом код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted Access');
// загружаем подсказку поведения
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm" id="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
<div>
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Итак, панель инструментов мы добавили. Но она пока ничего не делает. Для этого нам надо добавить три контроллера.
Добавление контроллеров для обработки событий панели управления.
Нам нужно добавить три контроллера:
- helloworlds.delete
- helloworld.edit
- helloworld.add
Создадим наши контроллеры, в файле admin/controllers/helloworlds.php добавим следующий код:
<?php
//проверка доступа
defined('_JEXEC') or die('Restricted access');
//импортируем библиотеку Joomla controlleradmin
jimport('joomla.application.component.controlleradmin');
/**
* Контроллер HelloWorld
*/
class HelloWorldControllerHelloWorlds extends JControllerAdmin
{
public function getModel($name = 'HelloWorld', $prefix = 'HelloWorldModel')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
Теперь в файл admin/controllers/helloworld.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// iимпортируем библиотеку Joomla controllerform
jimport('joomla.application.component.controllerform');
/**
* Контроллер HelloWorld
*/
class HelloWorldControllerHelloWorld extends JControllerForm
{
}
Теперь нужно создать шаблон для редактирования.
Создание отображения редактирования компонента.
Для создания отображения в файле admin/views/helloworld/view.html.php добавим следующий код:
<?php
// проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку Joomla view
jimport('joomla.application.component.view');
/**
* отображение HelloWorld
*/
class HelloWorldViewHelloWorld extends JView
{
public function display($tpl = null)
{
// получаем данные
$form = $this->get('Form');
$item = $this->get('Item');
// проверяем на наличеи ошибок
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// назначаем данные
$this->form = $form;
$this->item = $item;
// устанавливаем панель инструментов
$this->addToolBar();
// показываем шаблон
parent::display($tpl);
}
/**
* Настройки панели управления
*/
protected function addToolBar()
{
JRequest::setVar('hidemainmenu', true);
$isNew = ($this->item->id == 0);
JToolBarHelper::title($isNew ? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW')
: JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'));
JToolBarHelper::save('helloworld.save');
JToolBarHelper::cancel('helloworld.cancel', $isNew ? 'JTOOLBAR_CANCEL'
: 'JTOOLBAR_CLOSE');
}
}
Дальше создадим файла admin/views/helloworld/tmpl/edit.php и поместим туда следующий код:
<?php
// права доступа
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Отлично, это сделали. Но наша форма читает данные из модели и записывает данные в модель. А эта модель использует getTable и getForm, а также loadData. Нам нужно изменить нашу модель и описать форму.
Создание модели для расширения.
Для этого изменим файл admin/models/helloworld.php следующим образом:
<?php
//проверка доступа
defined('_JEXEC') or die('Restricted access');
// импортируем библиотеку Joomla modeladmin
jimport('joomla.application.component.modeladmin');
/**
* Модель HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelAdmin
{
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_helloworld.helloworld', 'helloworld',
array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
protected function loadFormData()
{
// проверка раннее введенных данных
$data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
Наша модель унаследована от JModelAdmin и использует его метод loadForm. А этот метод ищет файл с формой в папке admin/models/forms/ Поэтому давайте создадим файл admin/models/forms/helloworld.xml и поместим туда следующий код:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="greeting"
type="text"
label="COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_GREETING_DESC"
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>
На этом все, осталось только изменить файл описания нашего компонента:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.7.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.9</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>
<administration>
<!-- меню в административном разделе-->
<menu>COM_HELLOWORLD_MENU</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!-- папка для SQL файлов -->
<folder>sql</folder>
<!-- папка для table-файлов -->
<folder>tables</folder>
<!-- папка для model-файлов-->
<folder>models</folder>
<!-- папка для views-файлов -->
<folder>views</folder>
<!--папка для controller-файлов-->
<folder>controllers</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-рассылку данного блога или найти меня в twitter.
Всем удачной разработки.
0 коммент.:
Отправить комментарий