Создание компонент - Урок № 1
Создание Компонента - Hello
рис.1
Для нашего простейшего компонента на первом шаге обучения, потребуется создать всего пять файлов:
hello.php - точка входа в наш компонент controller.php - содержит наше основное управление компонентом views/hello/view.html.php - обрабатывает данные и передает их в шаблон для вывода views/hello/tmpl/default.php - шаблон для вывода данных hello.xml- XML служит для передачи инструкций для Jomla по установке компонента
Урок № 1
Joomla! всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (админ). Функция обработки URL загрузит требуемый компонент, основанный на значении 'option' в URL (метод GET) или переданных данных методом POST . Для нашего компонента, URL выглядит так:
index.php?option=com_hello&view=hello
Эта ссылка запустит выполнение файла, являющего точкой входа в наш компонент: components/com_hello/hello.php.
Код для этого файла довольно типичен для всех компонент.
<?php/** * @package Autor * @subpackage Components * components/com_hello/hello.php * @link http://autor.net/ * @license GNU/GPL*/// Защита от прямого обращения к скриптуdefined( '_JEXEC' ) or die( 'Restricted access' );// Подключение файла контроллера.require_once( JPATH_COMPONENT.DS.'controller.php' );// Проверка или требуется определенный контроллерif($controller = JRequest::getVar( 'controller' )) { require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php' );}// Создание класса нашего компонента$classname = 'HelloController'.$controller;$controller = new $classname( );// Выполнить задачу запроса$controller->execute( JRequest::getVar( 'task' ) );// Переадресация$controller->redirect();?>
Примечание:
JPATH_COMPONENT абсолютный путь к текущему компоненту, в наше случае components/com_hello. Для Front End JPATH_COMPONENT_SITE Для Back End JPATH_COMPONENT_ADMINISTRATOR
DS является автоматическим выбором слеша ( разделителя директорий ) '\' или '/'.
После загрузки основного контроллера проверяется или необходим определенный контроллер. В данном случае у нас только основной контроллер, Эта часть кода будет использоваться в дальнейшем.
<classname>JRequest</classname>: getVar() загружает значение переменной из URL или методом POST. Так как наш URL index.php?option=com_hello&controller=controller_name, мы можем определить название нашего контролера: echo JRequest::getVar('controller');
Мы имеем основной контроллер '<classname>HelloController</classname>' в com_hello/controller.php, так же загружаются дополнительные названия контроллера к примеру: HelloControllerController1 в com_hello/controllers/controller1.php Такой стандарт упрощает схему многозадачного компонента (это будет использоваться в последующих уроках, в данном случае в нашем компоненте одна задача ) '{Componentname}{Controller}{Controllername}'
После того, как контроллер создан, мы инструктируем контроллер выполнить задачу, как определено в URL: index.php? option=com_hello& task=sometask. Если нет определение задачи, то по умолчанию будет задача ''display''. Когда используется задача 'display'' , переменная ''display'' укажет то что выводить. Пример стандартных задач - save, edit, new...
На этом шаге контроллер переадресовывает страницу. Обычно используется для таких задач как SAVE.
Главная точка входа (hello.php) по существу пропускает управление на контроллер, который обрабатывает выполнение задачи, которая была определена в запросе.
Создание Контроллера
Наш компонент имеет только одну задачу - Hello. Поэтому, контроллер будет очень прост. Никакая манипуляция данных не требуется. Все, что потребности, которые будут сделаны являются соответствующим загруженным view. Мы будем иметь только один метод в нашем контроллере: view (). Большинство требуемых функциональных возможностей встроено в JController класс, мы должны только вызывать JController:: view () метод.
Код основного контроллера:
<?php/** * @package Autor * @subpackage Components * @link http://autor.net/ * @license GNU/GPL */// no direct accessdefined( '_JEXEC' ) or die( 'Restricted access' );jimport('joomla.application.component.controller');/** * Hello World Component Controller * * @package Joomla.Tutorials * @subpackage Components */class HelloController extends JController{ /** * Method to display the view * * @access public */ function display() { parent::display(); }}?>
<classname> JController </classname> конструктор будет всегда регистрировать display () задачу так как у нас она одна и не определена (используется registerDefaultTask () метод), устанавливается default task метод ( задача по умолчанию ).
display () - это первый по приоритету метод, Он вызывают родительский конструктор. Это хороший визуальный ключ, чтобы указать на то, что выполнять контроллеру.
JController :: display () метод определит название layout и layout запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач. Когда Вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента. К примеру, выбор при создании пункта меню таких задач: вывод списка автомобилей, вывод списка событий, вывод данных по одному автомобилю, вывод отдельного случая. Layout - путь, которым задается вывод определенной задачи.
В нашем компоненте, единственное значение - view: hello и единственное значение - layout : default ( по умолчанию ).
Creating the View
The task of the view is very simple: It retrieves the data to be displayed and pushes it into the template. Data is pushed into the template using the<classname>JView</classname>::assignRef method.
The code for the view is:
<?php/** * @package Autor * @subpackage Components * @link http://autor.net/ * @license GNU/GPL*/// no direct accessdefined( '_JEXEC' ) or die( 'Restricted access' );jimport( 'joomla.application.component.view');/** * HTML View class for the HelloWorld Component * * @package HelloWorld */class HelloViewHello extends JView{ function display($tpl = null) { $greeting = "Hello World!"; $this->assignRef( 'greeting', $greeting ); parent::display($tpl); }}?> создание Template ( шаблона )
Наш шаблон очень прост, мы только отображаем приветствие, которое передавали в view:
<?php // no direct accessdefined('_JEXEC') or die('Restricted access'); ?><h1><?php echo $this->greeting; ?></h1> Создание файла hello.xml
Можно установить компонент вручную, копирую файлы по FTP протоколу создавая необходимые папки и таблицы в базе данных, но лучшим вариантом является использования установочного файла для пакетной загрузки файлов и установки компонента
Детали о компоненте и о авторе компонента. список файлов, которые должны быть скопированы. внешний PHP файл, который исполняет дополнительную установку и деинсталлирует операции. внешние SQL файлы, которые содержит запросы базы данных, отдельно для устанавливки и деинсталляции
Формат XML файла следующий:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd"><install type="component" version="1.5.0"> <name>Hello</name> <!-- The following elements are optional and free of formatting conttraints --> <creationDate>2007 02 22</creationDate> <author>Имя Автора</author> <authorEmail> Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. </authorEmail> <authorUrl>http://www.autor.net</authorUrl> <copyright>Копирайт</copyright> <license>Лицензия</license> <!-- The version string is recorded in the components table --> <version>Component Version String</version> <!-- The description is optional and defaults to the name --> <description>Description of the component ...</description> <!-- 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>hello.php</filename> <filename>controller.php</filename> <filename>views/index.html</filename> <filename>views/hello/index.html</filename> <filename>views/hello/view.html.php</filename> <filename>views/hello/tmpl/index.html</filename> <filename>views/hello/tmpl/default.php</filename> </files> <administration> <!-- Administration Menu Section --> <menu>Hello World!</menu> <!-- Administration Main File Copy Section --> <files folder="admin"> <filename>index.html</filename> <filename>admin.hello.php</filename> </files> </administration></install>
Также есть файлы, которые будут скопированы, это - index.html. index.html помещен в каждый каталог, чтобы препятствовать пользователям получать листинг каталога. Эти файлы содержат одну единственную строку:
<html><body bgcolor="#FFFFFF"></body></html>
С помощью этих файлов будет отображаться пустая страница.
Расположение файлов должно сответствовать схеме на рис.1
Создание компонент - Урок № 1 - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.