Создание компонент - Урок № 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 для просмотра. Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script </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. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

  Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...