вторник, 7 февраля 2012 г.

Создание расширения для CMS Joomla 1.7. Часть 9. Добавление actions в админку CMS Joomla

Доброго времени суток. И мы с Вами продолжаем создавать расширение для 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>

Итак, панель инструментов мы добавили. Но она пока ничего не делает. Для этого нам надо добавить три контроллера.
Добавление контроллеров для обработки событий панели управления.
Нам нужно добавить три контроллера:
  • 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.
Всем удачной разработки.

Понравилась статья? Поблагодарить автора:

Введите e-mail адрес:



0 коммент.:

Отправить комментарий