Введение
Программное обеспечение базы базе приложений, которые могут быть использованы разработчиком. В рамках Joomla! 1,5 развязывает большой мощности для них. Joomla! код был разработан для расширения. Это руководство проведет вас через процесс разработки компонентов с использованием рамок.
Рамках данного проекта будет разработка простого "Hello World! компонента. В будущем учебники, эта простая структура будет построена на, чтобы показать всю мощь и универсальность шаблон MVC дизайна в Joomla!
Требования
Вы должны Joomla! 1,5 или больше для этого учебника.
Введение в модель-представление-контроллер

Хотя идея компонента может показаться очень простым, код может быстро стать очень сложным, как дополнительные возможности добавления или интерфейс настраивается.
Model-View-Controller (далее по тексту, как MVC) является шаблон проектирования программного обеспечения, которые могут быть использованы для организации код таким образом, что бизнес-логики и представления данных отдельно. Помещение за этого подхода является то, что, если бизнес-логика сгруппированы в один раздел, то интерфейс и взаимодействие с пользователем, который окружает данные могут быть пересмотрены и подгонять без необходимости перепрограммирования бизнес-логики. MVC был первоначально разработан для отображения в режиме обычного ввода, обработки, выход ролей в логической архитектуры графического интерфейса.
Эти три главных ролей являются основой для Joomla MVC. Они описаны здесь, в краткой, но для более подробного объяснения, пожалуйста, обратитесь к ссылкам в конце этого учебника.
Модель
Модель входит в состав компонента, который инкапсулирует данные приложения. Он будет часто предоставляют процедуры для управления и управления этими данными в значимым образом в дополнение к процедурам, которые получают данные из модели. В нашем случае, модель будет содержать методы для добавления, удаления и обновления информации о приветствия в базе данных. Он также будет содержать методы для получения списка приветствия из базы данных. В общем, основной метод доступа к данным, должны быть заключены в модели. Таким образом, если приложение должно быть перемещены из системы, которая использует плоский файл для хранения своей информации в системе, которая использует базы данных, модель единственным элементом, который необходимо изменить, а не мнение или контроллера.
Открыть
Открыть является частью компонента, который используется для отображения данных из модели таким образом, что подходит для взаимодействия. Для веб-приложение, вид, как правило, быть страница HTML, который возвращается к данным. Открыть извлекает данные из модели (которая передается от контроллера) и каналы данных в шаблон, который заполняется и представлена пользователю. Открыть не вызывает данные, которые будут изменены в любом случае, это только показывает данные, полученные от модели.
Контроллер
Контроллер отвечает за реагирование на действия пользователя. В случае веб-приложения, действий пользователя (как правило) запросе страницы. Контроллер будет определить, что запрос делается пользователем и адекватно реагировать на запуск модели для управления данными, надлежащим образом и проходящие модели в поле зрения. Контроллер не отображает данные в модель, он только вызывает методы в модели, которые изменяют данные, а затем передать в модели зрения, которая отображает данные.
Введение в модель-представление-контроллер
MVC связи

Часть 1 учебник фокусируется только на контроллер и зрения (с использованием шаблонов), которые выделены синим цветом на рисунке. Часть 2 включает и часть 3 расширяет функциональность модели для забора обработки данных; отмеченные зеленым цветом на рисунке.
Имейте в виду, что эта упрощенная картина применяется только для раздела сайта (т.е. передний конец). Идентичную картину применима для администратора раздел (т.е. фоновым). Административный раздел заботятся в частях 4 по 6 этого компонента развития учебника. Оба сайта и администратора разделе ведутся и настроен в XML-файлов на основе установки (как правило, называют файла манифеста).
Joomla! MVC Осуществление
! В Joomla, шаблон MVC реализован с помощью трех классов: JModel, JView и JController. Для получения более подробной информации об этих классах, пожалуйста, обратитесь к документации API ссылка (WIP).
Для целей обучения и отладки, добавив, во время выполнения отладчик для вашего Joomla! сайт может быть хорошим расширением особенно в развитии Вашего (учебник) компонента. Хорошим примером является проект сообщества J! Dump, что имеет то преимущество, что всплывающие который оставляет зрения выход без изменений. Система J! Dump позволяет просматривать не только ваши развития свойств, но и методы.
Для нашего основного компонента, мы только требуют пять файлов:
* Сайт / hello.php - это точка входа на наш компонент
* Сайт / controller.php - этот файл содержит нашей базе контроллера
* Сайт / просмотров / привет / view.html.php - этот файл получает необходимые данные и толкает его в шаблон
* Сайт / просмотров / привет / TMPL / default.php - это шаблон для нашей продукции
* Hello.xml - это XML (манифест) файл, который рассказывает Joomla! Как установить наш компонент.
Помните, что имя файла для точки входа должен иметь то же имя компонента. Например, при вызове компонента "очень сложный Имя компонента", во время установки (см. ниже в разделе hello.xml) Joomla! создаст com_veryintricatenamecomponent папку и PHP точки входа файл должен быть назван veryintricatenamecomponent.php в противном случае она не будет работать. Помните, что использование некоторых специальных символов, notibly подчеркивания '_', может иметь особое значение в Joomla и его следует избегать в компоненте имена или файлы.
Каталог сайта здесь для части компонента, которые устанавливаются в передней сайте конца.
Соглашения об именовании
Основная статья: Соглашение об именах
В этот момент важно сказать, что некоторые слова зарезервированы для использования в компонент или его имя класса, и нарушение некоторых, которые будут производить жесткий для отладки ошибок. Одним из них является "Вид" (в любом случае характер) для просмотра класс (подкласс JView) и контроллер класс (подкласс JController), потому что мнение класса должны иметь первую часть названия же, как и имя контроллера класса, и имя компонента (хотя нарушение последнего никто не будет производить ошибка, это просто полезно конвенции).
Все имена и foldernames для моделей, представлений и контроллеры должны быть строчные для того, чтобы хорошо работают на Unix / Linux-систем.
index.php?option=com_hello&view=hello
Это позволит загрузить наш главный файл, который можно рассматривать как единую точку входа для нашего компонента:
компонент / com_hello /hello.php.
Код для этого файла является довольно типичной по компонентам.
Сайт / hello.php:
<?php
/**
* @package Joomla.Tutorials
* @subpackage Components
* components/com_hello/hello.php
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
// Require the base controller
require_once( JPATH_COMPONENT.DS.'controller.php' );
// Require specific controller if requested
if($controller = JRequest::getWord('controller')) {
$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
if (file_exists($path)) {
require_once $path;
} else {
$controller = '';
}
}
// Create the controller
$classname = 'HelloController'.$controller;
$controller = new $classname( );
// Perform the Request task
$controller->execute( JRequest::getWord( 'task' ) );
// Redirect if set by the controller
$controller->redirect();
Первое утверждение проверки безопасности.
JPATH_COMPONENT это абсолютный путь к текущему компоненту, в нашем случае компоненты / com_hello. Если вы конкретно нужно либо компонент сайта или компонента администратора, вы можете использовать JPATH_COMPONENT_SITE или JPATH_COMPONENT_ADMINISTRATOR.
DS является разделителем каталогов вашей системы: либо '/' или '\'. Это
автоматически устанавливается каркас, разработчику не нужно беспокоиться о разработке различных версий для различных операционных
систем сервера. "DS" постоянный всегда должны быть использованы при обращении к файлам на локальном сервере.
После загрузки базы контроллера, мы проверяем, если определенный контроллер не требуется. В этом компоненте, контроллер базовых является единственным контроллером, но мы оставим эту условную проверить "на месте" для использования в будущем.
JRequest: getWord () находит слово переменной в URL или отправленных данных. Так что, если наши URL является index.php вариант = com_hello и контроллера = controller_name, то мы можем получить наше имя контроллера в нашем компоненте с помощью: эхо JRequest:: getWord ("контроллер");?
Теперь у нас есть / controller.php нашей базе контроллера "HelloController в com_hello, и, при необходимости, дополнительных контроллеров, как" HelloControllerController1 в com_hello/controllers/controller1.php. Используя эту стандартную схему именования будет делать вещи легко позже: "{Componentname} {} {контроллер Controllername} '
После контроллер будет создан, мы поручаем контроллер для выполнения задач, определенных в URL: index.php вариант = com_hello и задачи = sometask. Если не поставлена задача, "Дисплей" задача по умолчанию будет принят. При отображении используется, переменная "Вид" будет решать, что будет отображаться. Другие общие задачи сохранения, изменения, новые ...
Контроллер может решить для перенаправления страницы, как правило, после задача, как "Сохранить" была завершена. Это последнее утверждение заботится о фактических перенаправление.
Главная точка входа (hello.php) существенно передает управление контроллером, который обрабатывает выполнения задачи, которая была указана в запросе.
Обратите внимание, что мы не используем закрывающий тег PHP в этом файле:>. Причиной этого является то, что мы не будет иметь никаких нежелательных пробелы в выходной код. Это по умолчанию практике с Joomla! 1,5, и будет использоваться для всех PHP только для файлов.
Создание контроллера
Наш компонент имеет только одну задачу - приветствую мира. Таким образом, контроллер будет очень просто. Нет данных манипуляций не требуется. Все, что нужно сделать, это соответствующее представление загружен. У нас будет только один метод в нашем контроллера: дисплей (). Большинство необходимую функциональность встроена в классе JController, поэтому все, что нам нужно сделать, это вызвать JController:: дисплей () метод.
Код для сайта базу контроллера / controller.php является:
<?php
/**
* @package Joomla.Tutorials
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
* @license GNU/GPL
*/
// No direct access
defined( '_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();
}
}
Конструктор JController всегда будет зарегистрироваться дисплей () задачи и если не указано иное (с использованием registerDefaultTask () метод), она будет установить его в качестве задачи по умолчанию.
Это баребоны дисплей () метод не очень даже необходимо, поскольку все это является ссылаться на родительский конструктор. Тем не менее, это хорошая визуальную подсказку, чтобы указать, что происходит в контроллере.
JController:: дисплей () будет определить имя представления и макет запроса и загрузить просмотра и установки макета. При
создании пункта меню для компонента, Menu Manager позволит администратору выбрать мнение, что они хотели бы меню ссылку для
отображения и указать расположение. Открыть обычно относится к тем из определенного набора данных (например, список
автомобилей, список событий, один автомобиль, одно событие). Макет так, что это мнение является организованной.
В нашем компоненте, мы будем иметь единое представление называется привет, и один макет (по умолчанию).
Создание Открыть
Задача зрения очень проста: она получает данные для отображения и толкает его в шаблон. Данных помещается в шаблон с помощью JView:: assignRef метод. (Примечание:.
Ключа (первый аргумент) передается assignRef метод не может быть
предшествует подчеркивание т.е. $ this-> assignRef ('_greeting',$greeting) Это вызовет assignRef метод вернуться ложным и ваша
переменная будет не канувшей в шаблон.)
Код для просмотра на сайте / просмотров / привет / view.html.php:
<?php
/**
* @package Joomla.Tutorials
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
* @license GNU/GPL
*/
// no direct access
defined( '_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);
}
}
Создание шаблона
Joomla! шаблоны / макеты обычные файлы PHP, которые используются для макета данных с точки зрения определенным образом. Переменные, назначенные по JView:: assignRef метода можно получить доступ из шаблонов с помощью $ this-> {} PropertyName (см. ниже шаблон кода для примера).
Наш шаблон очень проста: мы хотим, чтобы отобразить приветствие, которое было принято в с точки зрения - этот файл:
Сайт / просмотров / привет / TMPL / default.php:
<?php
// No direct access
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>
Упаковка все это - Создание hello.xml файла
Есть возможность установить компоненты вручную путем копирования файлов с помощью FTP-клиента и изменения таблиц базы данных. Она более эффективна для создания файла пакета, что позволит Joomla! Installer делать это за вас. Этот пакет содержит файл разнообразную информацию:
* Основные описательные сведения о компоненте (например, имя), и, возможно, описание, авторские права и лицензии.
* Список файлов, которые должны быть скопированы.
* При необходимости, файл PHP, который выполняет дополнительные установки и удаления операций.
* При необходимости, файл, который содержит SQL запросов к базам данных, которые должны быть выполнены при установке / удалении
Формат файла XML в hello.xml выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
<name>Hello</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>2007-02-22</creationDate>
<author>John Doe</author>
<authorEmail> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>1.01</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>controller.php</filename>
<filename>hello.php</filename>
<filename>index.html</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/default.php</filename>
<filename>views/hello/tmpl/index.html</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<files folder="admin">
<filename>hello.php</filename>
<filename>index.html</filename>
</files>
</administration>
</install>
Вы могли заметить, манифест источник вышеупомянутые файлы, которые мы не обсуждали. Эти файлы index.html и администратора файлов. Index.html файл помещается в каждом каталоге для предотвращения любопытных пользователей от получения каталога. Если нет файла index.html, некоторые веб-серверы список содержимого каталога. Часто это нежелательно. Эти файлы имеют простой линии:
<html><body bgcolor="#FFFFFF"></body></html>
Это просто покажет пустую страницу.
Hello.php файл в папке администратора является точкой входа для администратора разделе компонента наше. Так
как наш компонент не имеет администратор должен (пока), этот файл будет
иметь то же содержание, как index.html файлы на данный момент.
Если вы следовали вдоль, вы можете посетить URL index.php?option=com_hello, чтобы ваша работа.
