Путь:    Главная arrow Вебмастеру Joomla 1.5 arrow Урок № 2

Расширение возможностей Компонента "Hello" - Урок № 2- Добавление Model

Вступление

В первом уроке был создан простой компонент view-controller для CMS Joomla 1.5.

Реализован код вывода приветствия, который является точным образцом MVC.

В этом уроке расширим возможности и гибкость компонента "Hello" добавив Бизнес модель ( Model )

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

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

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

В общем основная структура доступа к данным должна быть кратко описана в модели.

Таким способом, если обработку запроса данных необходимо изменить , который использует дата - файл, базу данных, Модель - единственный элемент, в который вносятся изменения , не затрагивая код Представления ( view) или Контроллера ( controller ).

При переносе точки запроса данных в общем алгоритме компонента, вносятся изменение только в код Представления.

В этом уроке, будем моделировать событие компонента "Hello", которое генерирует приветствие. Таким образом в компоненте будет один запрос к модели getGreeting (), который возвратит строку "Hello, World!".

Образец кода для класса Модели:

<?php
/**
 * Hello Модель для "Hello" Компонета
 * 
 * @package Автор
 * @package component/model/models/hello.php
 * @link 	URL Автора
 * @license Тип лицензии ( GNU/GPL )
 */


// Check to ensure this file is included in Joomla!

defined
('_JEXEC') 
or 
die();

jimport( 'joomla.application.component.model' );

/**
 * Hello Model
 *
 * @package    Автор
 * @subpackage Components
 */
class HelloModelHello extends JModel
{
    /**
    * Gets the greeting
    * @return string The greeting to be displayed to the user
    */
    function getGreeting()
    {
        return 'Hello, World!';
    }
}

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

С помощью этой функции все файлы загружаются из библиотеки ( директория libraries ).

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

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

Используем Модель ( Model ) в Представление ( view )

Структура 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:

<?php

/**
 * Hello View for Hello World Component
 * 
 * @package    	Автор
 * @subpackage 	Components
 * @link			components/views/hello/view.html.php
 * @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    Joomla.Tutorials
 * @subpackage Components
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $model = $this->getModel();
        $greeting = $model->getGreeting();
        $this->assignRef( 'greeting',	$greeting );

        parent::display($tpl);
    }
}
?>

Добавление для файла hello.xml

Для завершения работы над данной версией компонента, необходима в секцию Site ( Front End) добавить файлы Модели:

<filename>models/hello.php</filename>

Код для нового файла hello.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>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 -->
    <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>
        <filename>models/index.html</filename>
        <filename>models/hello.php</filename>
    </files>
    
    <administration>
        <!-- Administration Menu Section -->
        <menu>Hello World!</menu>
        
        <!-- Administration 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 /admin/ in the package -->
        <files folder="admin">
    <!-- Site Main File Copy Section -->
            <filename>index.html</filename>
            <filename>admin.hello.php</filename>
        </files>        
    </administration>
</install>

Заключение

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