В предыдущей статье мы с Вами создали простой компонент. Да, у него нет никакой функциональной нагрузки, да и вообще-то задача у нас стояла другая: нам необходимо было разобраться в структуре расширения, что мы благополучно и сделали. Если кто-то, по каким-то причинам пропустил предыдущие две статьи, я настоятельно рекомендую не полениться и прочитать их: “Создание расширения для CMS Joomla 1.7. Введение.” и “Создание расширения для CMS Joomla 1.7. Часть 1”. Особенно это следует сделать для тех, кто не создавал расширений для более ранних версий Joomla. Ну, что приступим...
Разделим наш компонент на три части:
CMS Joomla имеет класс для работы с состоянием контроллеров - JController. Для того, чтобы воспользоваться данным классом необходимо его подключить. Подключение класса осуществляется следующим образом: в файле site/helloworld.php добавить следующие строки
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
//импорт библиотеки контроллеров joomla
jimport('joomla.application.component.controller');
// Get an instance of the controller prefixed by HelloWorld
//Получаем экземпляр контроллера раснирения HelloWorld
$controller = JController::getInstance('HelloWorld');
// Выполняем запрос задачи
$controller->execute(JRequest::getCmd('task'));
// Перенаправляем, если установлен контроллер
$controller->redirect();
Статический метод getInstance класса JController создаст контроллер. В приведенном примере это будет экземпляр контроллера объекте класса с именем HelloWorldController. Сама CMS Joomla будет искать объявление этого класса в файле controller.php (это задано по умолчанию). Поэтому нам надо в папке site создать файл controller.php, следующего содержания:
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
// импорт библиотеки контроллеров joomla
jimport('joomla.application.component.controller');
/**
* Hello World Component Controller
*/
class HelloWorldController extends JController
{
}
В зависимости от состояния и типа наш класс JController будет искать как отобразить содержимое в components/com_<название компонента>/site/views/<название представления>/folder. Так, например, в нашем случае инструкция по тому, что отобразить в зависимости от состояния будет находиться:
components/com_helloworld/site/views/helloworld/ Имя папки по умолчанию является имя самого компонента. А сам файл называется view.html.php.
Теперь вернемся к созданию нашего компонента и в папке “site” создадим папку “views”. В папке “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 метода отображения
function display($tpl = null)
{
// Назначение данных для просмотра
$this->msg = 'Hello World';
//Показываем представление
parent::display($tpl);
}
}
Ну вот почти и все. Мы создали контроллер, записали инструкцию по тому что отобразить в зависимости от состояния нашего контроллера. Осталось только добавить шаблон представления. Метод отображения класса JView называется display. В нашем случае этот метод будет отображать содержимое при помощи файла /tmpl/default.php
Давайте создадим в site/views/helloworld папку “tmpl”, а в ней файл default.php следующего содержания:
<?php
// защита доступа
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>
Этот шаблон будет включен в класс JView, поэтому $this относится к классу HelloWorldViewHelloWorld.
Изменим содержимое файла 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.2</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>
</files>
<administration>
<!-- меню в административном разделе-->
<menu>Hello World!</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>
</extension>
На этом статью можно и заканчивать. А, да мы забыли проверить. Загоняем все это “безобразие” в zip-архив и устанавливаем на нашу CMS Joomla. Проверяем. Результат: по умолчанию, Вы должны увидеть сообщение, которое храниться в переменной $this->msg, которая находиться в view.html.php.
Ну вот, теперь все. Скачать компонент данного урока можно ТУТ (только измените название с com_helloworld_2.zip на com_helloworld.zip). Пишите комментарии. Да, и не забывайте подписываться на мой блог
Разделим наш компонент на три части:
- Модель - управляет данными.
- Контроллер - выполняет задачи, устанавливает и получает состояния модели и передает это состояние в отображение.
- Отображение - отображает содержимое в зависимости от типа (error, feed, HTML, JSON, RAW, XML)
CMS Joomla имеет класс для работы с состоянием контроллеров - JController. Для того, чтобы воспользоваться данным классом необходимо его подключить. Подключение класса осуществляется следующим образом: в файле site/helloworld.php добавить следующие строки
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
//импорт библиотеки контроллеров joomla
jimport('joomla.application.component.controller');
// Get an instance of the controller prefixed by HelloWorld
//Получаем экземпляр контроллера раснирения HelloWorld
$controller = JController::getInstance('HelloWorld');
// Выполняем запрос задачи
$controller->execute(JRequest::getCmd('task'));
// Перенаправляем, если установлен контроллер
$controller->redirect();
Статический метод getInstance класса JController создаст контроллер. В приведенном примере это будет экземпляр контроллера объекте класса с именем HelloWorldController. Сама CMS Joomla будет искать объявление этого класса в файле controller.php (это задано по умолчанию). Поэтому нам надо в папке site создать файл controller.php, следующего содержания:
<?php
// Защита доступа
defined('_JEXEC') or die('Restricted access');
// импорт библиотеки контроллеров joomla
jimport('joomla.application.component.controller');
/**
* Hello World Component Controller
*/
class HelloWorldController extends JController
{
}
В зависимости от состояния и типа наш класс JController будет искать как отобразить содержимое в components/com_<название компонента>/site/views/<название представления>/folder. Так, например, в нашем случае инструкция по тому, что отобразить в зависимости от состояния будет находиться:
components/com_helloworld/site/views/helloworld/ Имя папки по умолчанию является имя самого компонента. А сам файл называется view.html.php.
Теперь вернемся к созданию нашего компонента и в папке “site” создадим папку “views”. В папке “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 метода отображения
function display($tpl = null)
{
// Назначение данных для просмотра
$this->msg = 'Hello World';
//Показываем представление
parent::display($tpl);
}
}
Ну вот почти и все. Мы создали контроллер, записали инструкцию по тому что отобразить в зависимости от состояния нашего контроллера. Осталось только добавить шаблон представления. Метод отображения класса JView называется display. В нашем случае этот метод будет отображать содержимое при помощи файла /tmpl/default.php
Давайте создадим в site/views/helloworld папку “tmpl”, а в ней файл default.php следующего содержания:
<?php
// защита доступа
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>
Этот шаблон будет включен в класс JView, поэтому $this относится к классу HelloWorldViewHelloWorld.
Изменим содержимое файла 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.2</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>
</files>
<administration>
<!-- меню в административном разделе-->
<menu>Hello World!</menu>
<!-- Копирование сайтов в секцию Administration -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>
</extension>
На этом статью можно и заканчивать. А, да мы забыли проверить. Загоняем все это “безобразие” в zip-архив и устанавливаем на нашу CMS Joomla. Проверяем. Результат: по умолчанию, Вы должны увидеть сообщение, которое храниться в переменной $this->msg, которая находиться в view.html.php.
Ну вот, теперь все. Скачать компонент данного урока можно ТУТ (только измените название с com_helloworld_2.zip на com_helloworld.zip). Пишите комментарии. Да, и не забывайте подписываться на мой блог
Спасибо за статьи шикарные, но было бы очень удобно, если бы код был разноцветным(хотя бы как это делает notepad++)
ОтветитьУдалитьПостараюсь подобрать плагин для отображения кода, пока ничего стоящего не нашел для blogger.
ОтветитьУдалитьпроверьте правописание, несколько раз уже встречал "...ться" не там, где нужно.
ОтветитьУдалитьв остальном все шикарно
Уважаемый Анонимный, буду признателен, если Вы покажете мне какие "...ться" Вас смутили. Заранее благодарю.
ОтветитьУдалить"components/com_helloworld/views/helloworld/" - это не опечатка случайно? если судить по архиву прикрепленному к данному посту каталог views должен располагаться в каталоге site.
ОтветитьУдалитьP.S.: Спасибо за отличные статьи!
Михаил, да это опечатка. Все исправил. Спасибо за комментарий.
Удалитьcomponents/com_/views//folder.
Удалитьтут тоже поправьте
поправил
УдалитьРомчик, ты красава! По jооmla, на родном и могучем, даже не ожидал найти настолько ценной и актуальной информации... С англицким мануалом, я бы точно месяцок проковырялся. А тут, можно сказать за вечер освоил. Благодарствую.
ОтветитьУдалитьНе получается скачать файл с уроком.... :(
ОтветитьУдалитьПерезалил на другой файлообменник, качайте.
УдалитьСпасибо!
ОтветитьУдалитьКстати upload.com.ua вообще перестал раздавать файлы.
В следующих статья такая же беда..
Да, я знаю. Даже свои файлы забрать нельзя и техподдержка их не отвечает. В ближайшее время я все перезалью. Извиняюсь за неудобства.
УдалитьОгромное спасибо за жизненноважные начинающему разработчику статьи! Такой вопрос - важен ли регистр в названиях? Ну папок, классов и т.п?
ОтветитьУдалитьДа, важен. Так же учтите, что есть буквы одинаково выглядящие в кирилице и латинице, но это разные буквы (например м, с и др.)
Удалить