В первом уроке мы создали простой компонент, используя фрэймворк 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 =& $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 =& $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 компонент, каждый элемент которого очень прост но очень гибок по функциональности.





