Чаcть 2 - Модель и Вид (Представление)
Здесь я буду использовать компонент с прошлой части. Немного добавим в него функциональности, за счет подключения Вида, Модели и Контроллера. Все манипуляции будут касаться только сайта, административная панель Joomla практически не будет затрагивать, ну за исключением того, что можно будет создать в ней пункт меню ссылающийся на компонент.
Начинаем с точки входа
site/hello.php
<?php
// Защита от прямого доступа к файлу
defined('_JEXEC') or die('Restricted access');
// Подключаем библеотеку контроллера Joomla
jimport('joomla.application.component.controller');
// Получаем экземпляр класса контроллера с префиксом Hello
$controller = JController::getInstance('Hello');
// Обрабатываем запрос (task)
$controller->execute(JRequest::getCmd('task'));
// Переадресуем, если установлено контроллером
$controller->redirect();
Как видно здесь подключается контроллер, нужно его создать.
site/controller.php
Контроллер пока будет пустой. Если никакой задачи (task) не будет в переменной запроса, то по умолчанию будет отображаться вид (представление) с именем Hello. Будет использоваться метод display основного класса JController.
Создание Вида
site/views/hello/view.html.php
<?php
// Защита от прямого доступа к файлу
defined('_JEXEC') or die('Restricted access');
// Подключаем библиотеку представления Joomla
jimport('joomla.application.component.view');
// Создаем свой класс, расширяя JView
class HelloViewHello extends JView {
protected $msg=null;
// Перезаписуем метод display класса JView
function display($tpl = null) {
// Добавляем данные в Представление
$this->msg = $this->get('Msg');
// Отображаем представление
parent::display($tpl);
}
}
Вид в свою очередь будет брать данные из модели ($this->get('Msg')) и передавать их в шаблон (размету). По умолчанию в Joomla разметка или шаблон (дальше я буду называть шаблон) будет отображать, используя файл tmpl/default.php. Модель я опишу чуть позже.
Шаблон
site/views/helloworld/tmpl/default.php
В этой же папке создадим файл XML, который будет описанием к данному шаблону. Так же этот файл нужен для того что бы в Менеджере Меню (Menu Manager) в соответствующем меню можно было создать пункт, ссылающийся на компонент.
site/views/hello/tmpl/default.xml
<?xml version="1.0" encoding="utf-8" ?>
<metadata>
<layout title="Вывод компонента Hello">
<message>Это всплывающая подсказка</message>
</layout>
<fields name="request">
<fieldset name="request">
<field
id="id"
name="id"
type="list"
label="Выберите значение"
description="Здесь можно поместить описание"
default="1"
>
<option value="1">Привет!</option>
<option value="2">Пока!</option>
</field>
</fieldset>
</fields>
</metadata>
При создании пункта меню в нем можно будет выбирать два значения "Привет" или "Пока", эти значения будут обрабатываться в модели и дальше передавать в Вид соответствующее сообщение (msg)
Модель
site/models/hello.php
<?php
// Защита от прямого доступа к файлу
defined('_JEXEC') or die('Restricted access');
// подключаем библеотеку modelitem Joomla
jimport('joomla.application.component.modelitem');
// Создаем класс модели
class HelloModelHello extends JModelItem
{
/**
* @var string msg
*/
protected $msg;
/**
* Get the message
* @return string The message to be displayed to the user
*/
public function getMsg()
{
if (!isset($this->msg))
{
$id = JRequest::getInt('id');
switch ($id)
{
case 2:
$this->msg = 'Вы выбрали "Пока"!';
break;
default:
case 1:
$this->msg = 'Вы выбрали "Привет"';
break;
}
}
return $this->msg;
}
}
Как видно в ней обрабатывается переменная $id и в зависимости от нее выводиться сообщение. Эту переменную соответственно можно будет менять в пункте меню административной панели Joomla.
Осталось немного подкорректировать установочный XML файл.
hello.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Обратите внимание что method изменился на upgrade (обновление) -->
<extension type="component" version="1.6.0" method="upgrade">
<name>Hello!</name>
<creationDate>May 2010</creationDate>
<author>SmokerMan</author>
<authorEmail>kolyamba831@inbox.ru</authorEmail>
<authorUrl>http://www.joomla-code.ru</authorUrl>
<copyright>Информация о копирайте</copyright>
<license>Информация о лицензии</license>
<version>0.0.2</version>
<description>Описание компонента "Привет!" ...</description>
<files folder="site">
<filename>index.html</filename>
<filename>hello.php</filename>
<!-- Добавляем контроллер -->
<filename>controller.php</filename>
<!-- Добавляем папку Вида -->
<folder>views</folder>
<!-- Добавляем модель -->
<folder>models</folder>
</files>
<administration>
<menu>Hello!</menu>
<files folder="admin">
<filename>index.html</filename>
<filename>hello.php</filename>
</files>
</administration>
</extension>
Структура файлов получилась следующая:
- hello.xml
- site/index.html
- site/hello.php
- site/controller.php
- site/views/index.html
- site/views/hello/index.html
- site/views/hello/view.html.php
- site/views/hello/tmpl/index.html
- site/views/hello/tmpl/default.xml
- site/views/hello/tmpl/default.php
- site/models/index.html
- site/models/hello.php
- admin/index.html
- admin/hello.php
Теперь можно выбирая в пункте меню разное значение параметра менять соответсвенно сообщение на сайте.
12
Комментарии
10.02.2011 05:53
11.02.2011 01:40
16.02.2011 18:56
08.04.2011 21:26
у меня с чпу норм. joomla 1.6
29.04.2011 21:06
01.05.2011 18:28
23.04.2012 20:00
30.12.2012 00:33
Шаблон
site/views/helloworld/tmpl/default.php
...
...
В этой же папке создадим файл XML, который будет описанием к данному шаблону...
site/views/hello/tmpl/default.xml
22.04.2013 01:50
Не : site/views/helloworld/tmpl/default.php
а : site/views/hello/tmpl/default.php
22.04.2013 01:52
27.02.2013 14:54
13.08.2013 07:53
18.12.2014 08:37
RSS лента комментариев этой записи