Разработка Model-View-Controller (MVC) компонента. Часть 3 (продолжение)
В предыдущих статьях (1, 2) мы провели урок по созданию простейшего компонента на фреймворке Joomla. Как дополнение был встроен код в View (вид), не соответствующий Model-View-Controller (MVC) нашего компонента, так как вид только выводит данные, но не содержит их, о чем было сказано ранее. В сегодняшней статье мы разберем перенос данных из View в Model (из вида в модель) – оцените удобство функции.
Создаем модель. Вообще определение «Model» получило такое имя из-за того, что главная функция этого класса – представление некоего объекта. В нашем прошлом случае модель – это приветствие Hello Mister. Сегодня создадим модель HelloModelHello. Обозначение модели происходит по следующей схеме – имя компонента, сама модель и имя модели. Смоделируем приветствие при помощи метода getGreeting (), который возвращает строку Hello Mister. Код в Model будет прописываться следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < ?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 Mister '; } } |
Рассмотрим строку, начинающуюся с jimport. Функция jimport применяется для того, чтобы подгружать файлы из Joomla. То есть – мы загружаем файл /libraries/joomla/application/component/model.php. Точка в адресе применяется для того, чтобы разделить папки, а в конце адреса прописывается имя файла. Все файлы имеют относительный путь к libraries. Результатом будет подключение класса JModel и его расширение. После создания модели необходимо внести корректировку в вид.
Как будем использовать модель
Конструктор Joomla работает таким образом, что controller будет автоматически загружать модель, имеющую такое же название, как и у вида. После загрузки controller переместит Model в View. То есть, для получения модели можно применить метод JView:: getModel(). В коде нашего вида была строка $greeting = «Hello Mister»; Для использования модели нужно заменить эту строку на следующую:
1 2 | $model =&amp; $this->getModel(); $greeting = $model->getGreeting(); |
Теперь наш код будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < ?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.
1 | <filename>models/hello.php</filename> |
Результатом корректировки будет:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < ?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> </install> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- 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> |
1 2 3 4 | <administration> <!-- Administration Menu Section --> <menu>Hello World!</menu> </administration> |
1 2 3 4 5 6 7 8 9 | <!-- 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> |
Выводы
Мы создали простой компонент MVC (Model-View-Controller), все элементы которого достаточно просты в исполнении, но не очень гибкие по функциональности.
Оцените статью по 5-бальной шкале: