В первом уроке мы создали простой компонент, используя фрэймворк Joomla! 1.5.
Также мы вставили лишний код в Вид, который не соответствует MVC, потому что Вид должен только выводить данные, и не должен содержать их.
В этом уроке вы узнаете как перенести данные из вида в Модель.В дальнейшем вы увидете удобство всего этого.
Создание модели.Понятие модели получило такое название, потому что этот класс предназначен, чтобы представить некоторый объект. В нашем случае, первая модель это приветствие.
Наименование моделей строятся следующим образом: название компонента, model, название модели.
В нашем случае это HelloModelHello.
Далее мы будем моделировать одно поведение нашей модели, т.е. само приветствие.Мы создадим метод getGreeting (), который просто вернет строку Hello, World!.
Код модели:
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 = $model->getGreeting();
В итоге код выглядит так:
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-файл.
<?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 компонент, каждый элемент которого очень прост но очень гибок по функциональности.
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
Подробнее...