Все о Joomla 1.5

...заметки Котофеича

 
  • Increase font size
  • Default font size
  • Decrease font size

Home Уроки Уроки Разработка Модель-Вид-Контроллер (MVC) компонента - Часть 2 - Добавление Модели

Разработка Модель-Вид-Контроллер (MVC) компонента - Часть 2 - Добавление Модели

E-mail Печать PDF

В первом уроке мы создали простой компонент, используя фрэймворк Joomla! 1.5.
Также мы вставили лишний код в Вид, который не соответствует MVC, потому что Вид должен только выводить данные, и не должен содержать их.
В этом уроке вы узнаете как перенести данные из вида в Модель.В дальнейшем вы увидете удобство всего этого.

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

Понятие модели получило такое название, потому что этот класс предназначен, чтобы представить некоторый объект. В нашем случае, первая модель это приветствие.
Наименование моделей строятся следующим образом: название компонента, model, название модели.
В нашем случае это HelloModelHello.
Далее мы будем моделировать одно поведение нашей модели, т.е. само приветствие.Мы создадим метод getGreeting (), который просто вернет строку Hello, World!.
Код модели:

<?php
defined('_JEXEC') or die();
 
jimport( 'joomla.application.component.model' );
 
class HelloModelHello extends JModel
{
    /**
    * Gets the greeting
    * @return string The greeting to be displayed to the user
    */
    function getGreeting()
    {
        return 'Hello, World!';
    }
}

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

Использование модели

Фрэймворк Joomla работает так, что контроллер автоматически загрузит модель, которая имеет то же самое название как и вид, после чего поместит модель в вид. В результате мы легко можем получить модель, используя метод JView:: getModel().
Наш код в Виде содержал строку:

$greeting = "Hello World!";

Чтобы использовать нашу модель, мы изменяем эту строку на:

$model =&amp; $this->getModel();
$greeting = $model->getGreeting();

В итоге код выглядит так:

<?php
 
defined( '_JEXEC' ) or die( 'Restricted access' );
 
jimport( 'joomla.application.component.view');
 
class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $model =&amp; $this->getModel();
        $greeting = $model->getGreeting();
        $this->assignRef( 'greeting', $greeting );
 
        parent::display($tpl);
    }
}
?>
Добавление файла в установку

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

 
<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>
    <creationDate>2007 02 22</creationDate>
    <author>John Doe</author>
    <authorEmail></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>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 компонент, каждый элемент которого очень прост но очень гибок по функциональности.