Создание компонента Joomla! 1.6 (Часть 2) Модель MVC
В этой статье мы продолжим изучать создание компонента в Joomla! 1.6 и познакомим Вас с принципами модели MVС (модель-вид-представление).
Joomla 1.6 создание компонента (Часть 1)
В Joomla!1.6 framework, компоненты включают 3 основных части в соответствии с моделью MVC:
- модель(model) управляет данными
- контроллер(controller) выполняет задачи, устанавливает и получает состояние модели, определяет вид для вывода информации на экран
- вид или представлениеHelloWorld(view) выводит на экран контент согласно типу и расположению, выбранными контроллером
Контроллер в Joomla! 1.6В ядре Joomla! есть класс, который предназначен для работы с контроллерами - JController. Для использования этого класса в разрабатываемом компоненте Joomla! необходимо сначало его расширить.
В файл yoursite.ru/components/com_helloworld/helloworld.php (входной файл вашего компонента) добавим следующиес троки:
<?php
// запрет на прямой вызов файла
defined('_JEXEC') or die('Restricted access');
// импорт библиотеки контроллера
jimport('joomla.application.component.controller');
// получаем экземпляр контроллера
$controller = JController::getInstance('HelloWorld');
// выполняем задачу запроса
$controller->execute(JRequest::getCmd('task'));
// устанавливаем перенаправление
$controller->redirect();
Метод getInstance() вернет экземпляр контроллера, в результате мы создали контроллер HelloWorldController.
Далее создайте файл yoursite.ru/components/com_helloworld/controller.php и внесите в него строки
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controller library
jimport('joomla.application.component.controller');
/**
* Hello World Component Controller
*/
class HelloWorldController extends JController
{
}
Если в запросе задача(task) не будет указана, то будет выполнена задача по-умолчанию. Задачей по-умолчанию является display, в нашем примере эта задача выведет на экран
представление HelloWorld.
Создаем представление Joomla! 1.6Создайте файл yoursite.ru/components/com_helloworld/views/helloworld/view.html.php с содержанием
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla view library
jimport('joomla.application.component.view');
/**
* HTML View class for the HelloWorld Component
*/
class HelloWorldViewHelloWorld extends JView
{
// переопределяем метод JView display
function display($tpl = null)
{
// присваиваем данные
$this->msg = 'Hello World';
// выводим
parent::display($tpl);
}
}
Метод display нашего представления будет вызван как метод по-умолчанию, если другая задача не будет предана в контроллер. В нашем случае этот метод выведет на экран
контент используя шаблон tmpl/default.php
Создадим файл yoursite.ru/components/com_helloworld/views/helloworld/tmpl/default.php с кодом
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>
Этот файл будет подключен классом JView, поэтому здесь $this обращается к классу HelloWorldViewHelloWorld.
Теперь посмотрим что у нас получилось.
Перейдите по URL http://yoursite.ru/index.php?option=com_helloworld
Так как в запросе не определена задача (нет task), то контроллер определит задачу по-умолчанию display. В результате будет задействован шаблон views/helloworld/tmpl/default.php который выведет на экран сообщение "Hello World".
Теперь изменим наш установочный пакет
В установочной директории должны быть следуюшие файлы:
- helloworld.xml
- site/index.html
- site/helloworld.php
- site/controller.php
- site/views/index.html
- site/views/helloworld/index.html
- site/views/helloworld/view.html.php
- site/views/helloworld/tmpl/index.html
- site/views/helloworld/tmpl/default.php
- admin/index.html
- admin/helloworld.php
- admin/sql/index.html
- admin/sql/updates/index.html
- admin/sql/updates/mysql/index.html
- admin/sql/updates/mysql/0.0.1.sql
И обновим установочный файл helloworld.xml
<!--?xml version="1.0" encoding="utf-8"?-->
<extension type="component" version="1.6.0" method="upgrade">
<name>Hello World!</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationdate>November 2009</creationdate>
<author>John Doe</author>
<authorurl>http://www.example.org</authorurl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.2</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>
<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<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>
Cоздание компонента Joomla! 1.6 (Часть 3) Добавляем тип пункта меню
Комментарии
$controller = JController::ge tInstance('HelloWorld');
var_dump($contr oller);die();
И увидел, что у многих свойств стоит какой-то protected. Например ["task":protected]. Может, в этом дело? Что это вообще такое?