понедельник, 28 ноября 2011 г.

Создание расширения для CMS Joomla 1.7. Часть 5. Добавление переменной запроса.

Доброго времени суток! В предыдущей статье мы поговорили о создании модели в нашем компоненте. Сегодня мы немного усложним расширение, которое создаем для CMS Joomla. Да, уже пора наращивать функционал. Из предыдущих постов мы создали компонент, который выводил на экран надпись “Hello world!”, но этого же мало. Зачем нам нужен компонент, который ничего не обрабатывает и выводит одну лишь надпись. Поэтому сегодня мы остановимся на добавление переменной запроса, а точнее на добавлении параметров в меню компонента для CMS Joomla. Благо это в самом движке реализуется довольно просто. Для этого нам потребуется изменить нашу модель и немного подправить файла конфигурации. Ну что, приступим...

Для начала изменим файлы конфигурации <название компонента>/site/views/helloworld/tmpl/default.xml:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">

<message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC </message>

</layout>
    <fields name="request">
    <fieldset name="request">
    <field
    name="id"
    type="list"
    label=" COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"            description=" COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
    default="1"
    >
    <option value="1">Привет мир!</option>
    <option value="2"> Пока мир!</option>
    </field>
    </fieldset>
    </fields>
</metadata>
Как Вы помните из статьи “Создание расширения для CMS Joomla 1.7. Часть 3”, этот файл отвечает за создание пункта меню для нашего компонента. Тут мы немного изменили настройки для пункта меню, отвечающего за наш компонент, добавив поле, в которое поместили выпадающий список значений.
Тут бы хотелось обратить Ваше внимание на два замечания:
  1. Запрос группы для поля попадает в группу обязательных для заполнения параметров. (это вы увидите чуть ниже)
  2. Параметры массива будут добваалены к URL запроса
Теперь изменим нашу модель <название компонента>/site/models/helloworld.php, таким образом, чтобы она брала значения из URL:<?php
//  Защита доступа
defined('_JEXEC') or die('Restricted access');

// импортируем Joomla библиотеку modelitem
jimport('joomla.application.component.modelitem');

/**
* Наша модель для HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelItem
{
   protected $msg;
    /**
    * Вытягиваем сообщение
    * и возвращаем строку с сообщенеим для того, чтобы показать посетителям
    */
   public function getMsg()
   {
       if (!isset($this->msg))
       {
           $id = JRequest::getInt('id');
           switch ($id)
           {
               case 2:
                   $this->msg = 'Пока мир!';
                   break;
               default:
               case 1:
                   $this->msg = 'Привет мир!';
                   break;
           }
       }
       return $this->msg;
   }
}
Давайте немного опишем данный код. Тут, в принципе ничего сложного нет, с помощью JRequest::getInt('id') мы из URL вытаскиваем параметр переменной “id”. В следующей статье я рассмотрю класс JRequest.  И в зависимости от данного параметра наша модель будет выводить сообщение.
Ну на этом в принципе все, осталось только изменить основной файл настроек helloworld.xml и можно устанавливать наш компонент.
helloworld.xml:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.7.0" method="upgrade">

    <name>Hello World!</name>
    <!-- Данные о разработчике -->
    <creationDate>2011</creationDate>
    <author>zloykolobok</author>
    <authorEmail></authorEmail>
    <authorUrl>http://zloykolobok.blogspot.com</authorUrl>
    <copyright>Copyright Info</copyright>
    <license>License Info</license>
    <!--  Версия продукта-->
    <version>0.0.5</version>
    <!-- Описание компонента-->
    <description>Продолжение статей по созданию расширений для CMS Joomla</description>

    <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>
    </files>

    <administration>
       <!-- меню в административном разделе-->
       <menu>Hello World!</menu>
       <!-- Копирование сайтов в секцию Administration  -->
       <files folder="admin">
           <filename>index.html</filename>
           <filename>helloworld.php</filename>
           <!-- папка для SQL файлов -->
           <folder>sql</folder>
       </files>
    </administration>

</extension>
Теперь все это добавляем в zip-архив (тут Вы можете скачать zip-архив с готовым и рабочим компонентом, единственное переименуйте архив в com_helloworld.zip)и устанавливаем на наш сайт.
Для проверки Вы можете в адресной строке добавить index.php?option=com_helloworld&id=1 или index.php?option=com_helloworld&id=2. Давайте проверим устанавливаем данный компонент. Создаем пункт меню для нашего компонента, вот так выглядит у меня: 

В правой части в обязательных параметрах у нас появился выпадающий список из, которого мы можем выбрать:
  • “Привет мир!”
  • “Пока мир!”
Я выбрал “Привет мир!”. Теперь перейдем на наш сайт и перейдем по пункту меню для нашего компонента.
И вуаля у нас компонент отобразил “Привет мир!”:





Ну и для чистоты эксперимента, давайте изменим в пункте для нашего компонента в обязательных параметрах в выпадающем списке “Привет мир!” на “Пока мир!”. Сохраним и перейдем на наш сайт в пункт меню для компонента:




И... наш компонент работает. На этом нашу статью можно заканчивать.
Если у Вас что-то не получилось или что-то непонятно пишите в комментариях. Если у Вас есть какие-то дополнения или замечания обязательно пишите в комментариях. А также не забываем подписаться на мой блог. Вы также можете меня найти в twitter или в G+. Для проверки Вы можете скачать готовый компонент, только перед установкой его следует переименовать в com_helloworld.zip. Всем удачной и продуктивной разработки на CMS Joomla! ))


 

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

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



9 комментариев:

  1. У меня, когда я перехожу по пункту меню моего компонента, выходит сообщение "Hello world", а не "Привет мир!" или "Пока мир"Пока мир!"(

    ОтветитьУдалить
    Ответы
    1. Проверьте в файле /site/models/helloworld.php какие значения Вы присваиваете переменной msg

      Удалить
    2. public function getMsg()
      {
      if (!isset($this->msg))
      {
      $id = JRequestInt('id');
      switch($id) {
      case 2:
      $this->msg ='Пока мир!';
      break;
      default:
      case 1:
      $this->msg ='Привет мир!';
      break;

      }
      }
      return $this->msg;
      }

      Удалить
  2. Ромчик, помогите, пожалуйста! В чём ещё может быть причина?

    ОтветитьУдалить
    Ответы
    1. я перезалил исходник данного компонента, скачайте его и посмотрите будет тоже самое или все будет на русском

      Удалить
    2. Сейчас порядок) Спасибо! А в чём причина-то?)

      Удалить
  3. А, вижу есть разница в файле view.html.php)

    ОтветитьУдалить
  4. Ромчик, подскажите пожалуйста! Установил компонент, в админке выпадающий список отображается русскими символами, а в лицевой части сайта эти же сообщения выводятся ромбиками с вопросительным знаком.

    ОтветитьУдалить
  5. Уже разобрался, спасибо. Нужно было изменить кодировку в файле модели на utf-8

    ОтветитьУдалить