JOOMLA MASTER

Изучаем CMS Joomla на примерах

### Новое:

- Бесплатный курс по jQuery
- Как создавать сплывающие надписи, ссылки и иконки на рисунках
- Компонент администратора JCE
- Как сделать заголовок статьи ссылкой?
- Как изменять количество отображаемых материалов на странице категории?

Урок 3. Добавление Модели (Основы программирования для Joomla 1.5) |  |

В прошлом уроке был создан простой компонент на оснвое view-controller для CMS Joomla 1.5, который выводил "Hello World!" в окно браузера. Но для вывода "Hello World!" мы его вставили в код Вида (view), который не соответствует MVC, потому что Вид должен только выводить данные, и не должен содержать их. В этом уроке мы перенесем данные из вида в Модель. В дальнейшем вы увидите удобство всего этого.

## Создание модели

Модель - часть компонента, которая предоставляет данные для представления их по его запросу посланному через Контроллер. Такая схема часто освобождает от рутинной работы и от беспорядка в коде. Также этот метод предоставляет возможность управлять данными удобным способом в дополнение к коду, который посылает запрос данных из Модели.
В Joomla 1.5, Модель может содержать классы функций: добавить, удалить и модернизировать информацию в таблицах базы данных, а также методы восстановления списка таблиц базы данных. В модели должна быть кратко описана основная структура доступа к данным.
Таким способом, если необходимо изменить обработку запроса данных, то Модель (model) - единственный элемент, в который вносятся изменения, не затрагивая код Представления (view) или Контроллера (controller). При переносе точки запроса данных в общем алгоритме компонента, вносятся изменение только в код Представления.
В этом уроке, будем моделировать событие компонента "Hello", которое генерирует приветствие "Hello World!". Таким образом? в компоненте будет один запрос к модели getGreeting(), который возвратит строку "Hello World!".
Наименование моделей строятся следующим образом: название компонента, model, название модели. В нашем случае это HelloModelHello.

#### Код модели

Образец кода для класса Модели site/models/hello.php:

view source
print?
`01.``<?php`
`02.``/**`
`03.``` `* Hello Модель для "Hello" Компонета`
`04.``` `*`
`05.``` `* @package Автор`
`06.``` `* @package component/model/models/hello.php`
`07.``` `* @link URL Автора`
`08.``` `* @license Тип лицензии ( GNU/GPL )`
`09.``` `*/`
`10.`
`11.`
`12.``// Check to ensure this file is included in Joomla!`
`13.`
`14.``Defined (``'_JEXEC'``)` `or` `die``();`
`15.`
`16.``jimport(` `'joomla.application.component.model'` `);`
`17.`
`18.``/**`
`19.``` `* Hello Model`
`20.``` `*`
`21.``` `* @package Автор`
`22.``` `* @subpackage Components`
`23.``` `*/`
`24.``class` `HelloModelHello` `extends` `JModel`
`25.``{`
`26.``` `/**`
`27.``` `* Gets the greeting`
`28.``` `* @return string The greeting to be displayed to the user`
`29.``` `*/`
`30.``` `function` `getGreeting()`
`31.``` `{`
`32.``` `return` `'Hello, World!'``;`
`33.``` `}`
`34.``}`

Обратите внимание на строку, которая начинается с jimport. Функция jimport используется для загрузки файлов из фрэймворка Joomla. В нашем случае подгружается структура, которая требуются для нашего компонента. Этот запрос загрузит файл /libraries/joomla/application/component/model.php. Точки "." есть директивными слешами, и последняя часть - имя загружаемого файла. Все файлы загружаются относительно библиотек.

Далее в коде мы определяем необходимый класс для JModel class, так как наша модель является продолжением этого класса.

Создав Модель, необходимо изменить Представление, добавить запрос к Модели для получения строки приветствия.

## Использование модели ( Model )

Структура Joomla 1.5 организована таким способом, что контроллер автоматически загрузит модель, которая имеет то же название что и представление ( view ) и передаст доступ к своему классу . Так как Представление называется "Hello", модель "Hello" будет автоматически загружена и опубликована в представление ( view ). Поэтому, мы можем легко объявить функцию класса модели, используя метод JView:: в строке JView:: getModel ().
В код файла view.html.php вносим изменения - заменяем строку:
$greeting = "Hello World!";
на
$model = $this->getModel();
$greeting = $model->getGreeting();

Код файла view.html.php теперь будет выглядеть так:

view source
print?
`01.``<?php`
`02.```
`03.``defined(` `'_JEXEC'` `)` `or` `die``(` `'Restricted access'` `);`
`04.```
`05.``jimport(` `'joomla.application.component.view'``);`
`06.```
`07.``class` `HelloViewHello` `extends` `JView`
`08.``{`
`09.``` `function` `display(``$tpl` `= null)`
`10.``` `{`
`11.``` `$model` `=&` `$this``->getModel();`
`12.``` `$greeting` `=` `$model``->getGreeting();`
`13.``` `$this``->assignRef(` `'greeting'``,` `$greeting` `);`
`14.```
`15.``` `parent::display(``$tpl``);`
`16.``` `}`
`17.``}`
`18.``?>`

## Добавление файла в установку

Фрэймворк Joomla будет искать нашу модель в каталоге models. Поэтому изменим xml-файл.
<filename>models/hello.php</filename>

Код для нового файла hello.xml:

view source
print?
`01.``<?xml version=``"1.0"` `encoding=``"utf-8"``?>`
`02.`
`03.``<install type=``"component"` `version=``"1.5.0"``>`
`04.``` `<name>Hello</name>`
`05.``` `<!-- The following elements are optional` `and` `free of formatting conttraints -->`
`06.``` `<creationdate>2007 02 22</creationdate>`
`07.``` `<author>Имя Автора</author>`
`08.``` `<authoremail>Email Автора</authoremail>`
`09.``` `<authorurl>www.autor.net</authorurl>`
`10.``` `<copyright>Копирайт</copyright>`
`11.``` `<license>Лицензия</license>`
`12.``` `<!-- The version string is recorded in the components table -->`
`13.``` `<version>Component Version String</version>`
`14.``` `<!-- The description is optional` `and` `defaults to the name -->`
`15.``` `<description>Description of the component ...</description>`
`16.`
`17.``` `<!-- Site Main File` `Copy` `Section -->`
`18.``` `<files folder=``"site"``>`
`19.``` `<filename>index.html</filename>`
`20.``` `<filename>hello.php</filename>`
`21.``` `<filename>controller.php</filename>`
`22.``` `<filename>views/index.html</filename>`
`23.``` `<filename>views/hello/index.html</filename>`
`24.``` `<filename>views/hello/view.html.php</filename>`
`25.``` `<filename>views/hello/tmpl/index.html</filename>`
`26.``` `<filename>views/hello/tmpl/``default``.php</filename>`
`27.``` `<filename>models/index.html</filename>`
`28.``` `<filename>models/hello.php</filename>`
`29.``` `</files>`
`30.```
`31.``` `<administration>`
`32.``` `<!-- Administration Menu Section -->`
`33.``` `<menu>Hello World!</menu>`
`34.```
`35.``` `<!-- Administration Main File` `Copy` `Section -->`
`36.``` `<!-- Note the folder attribute: This attribute describes the folder`
`37.``` `to` `copy` `FROM in the package to install therefore files copied`
`38.``` `in this section are copied from /admin/ in the package -->`
`39.``` `<files folder=``"admin"``>`
`40.``` `<!-- Site Main File` `Copy` `Section -->`
`41.``` `<filename>index.html</filename>`
`42.``` `<filename>admin.hello.php</filename>`
`43.``` `</files>`
`44.``` `</administration>`
`45.``</install>`

Теперь мы имеем простой MVC компонент. Каждый элемент компонента очень прост, при этом компонент уже обладает более большей гибкостью и возможностью.

Архив исходных файлов для этого урока можно скачать по этой ссылке:
http://joomla-master.com/com_hello_3.zip

Предыдущие уроки по Основах программирования для Joomla 1.5:

Введение

Урок 1. Основы функционирования Joomla 1.5

Урок 2. Создание простейшего компонента для Joomla 1.5

﻿ JOOMLA MASTER; WEB Хостинг