рис.1
Для нашего простейшего компонента на первом шаге обучения, потребуется создать всего пять файлов:
hello.xml- XML служит для передачи инструкций для Jomla по установке компонента
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
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
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
class HelloController extends JController
{
function display()
{
parent::display();
}
}
?>
<classname> JController </classname> конструктор будет всегда регистрировать display () задачу так как у нас она одна и не определена (используется registerDefaultTask () метод), устанавливается default task метод ( задача по умолчанию ).
display () - это первый по приоритету метод,
Он вызывают родительский конструктор.
Это хороший визуальный ключ, чтобы указать на то, что выполнять контроллеру.
JController
:: display () метод определит название layout и layout запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач. Когда Вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента. К примеру, выбор при создании пункта меню таких задач: вывод списка автомобилей, вывод списка событий, вывод данных по одному автомобилю, вывод отдельного случая. Layout - путь, которым задается вывод определенной задачи.
В нашем компоненте, единственное значение - view: hello и единственное значение - layout : default ( по умолчанию ).
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
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
class HelloViewHello extends JView
{
function display($tpl = null)
{
$greeting = "Hello World!";
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}
}
?>
Наш шаблон очень прост, мы только отображаем приветствие, которое передавали в view:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>
Создание файла hello.xml
Можно установить компонент вручную, копирую файлы по FTP протоколу создавая необходимые папки и таблицы в базе данных, но лучшим вариантом является использования установочного файла для пакетной загрузки файлов и установки компонента
Формат 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>
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script
</authorEmail>
<authorUrl>http:
<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
скачать компонент Hello Урока № 1 можно здесь
|