Л
и
ч
н
ы
й
 
к
а
б
и
н
е
т
Goldensites | CMS Joomla | Joomla 1.6 | Статьи Joomla 1.6 | Создание компонента Joomla! 1.6 (Часть 2) Модель MVC

Создание компонента 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) Добавляем тип пункта меню


Комментарии 

 
0 #1 andrey 11.12.2011 11:30
Здравствуйте! Делал всё как написано, при попытке открыть http://mysite/index.php?option=com_helloworld выдаёт ошибку 500. Сделал дамп в файле /components/com_helloworld/helloworld.php:
$controller = JController::ge tInstance('HelloWorld');
var_dump($contr oller);die();
И увидел, что у многих свойств стоит какой-то protected. Например ["task":protected]. Может, в этом дело? Что это вообще такое?
Цитировать