Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Разработка компонент для CMS Joomla.

Разработка компонента с использованием базы данных

Цель работы:разработать для CMS Joomla компонент пользовательской части для просмотра информации из базы данных.

 

Краткие теоретические сведения:

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

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

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

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

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

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

 

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

 

<?php

/**

* Hello Модель для "Hello" Компонета

*

* @package Автор

* @package component/model/models/hello.php

* @link URL Автора

* @license Тип лицензии ( GNU/GPL )

*/

 

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 - организована таким способом, что контроллер автоматически загрузит модель, которая имеет то же название что и Представление и передаст доступ к своему классу. Так как Представление называется "Hello", модель "Hello" будет автоматически загружена и опубликована в Представлении. Поэтому можно легко объявить функцию класса модели, используя метод 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

*/

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>

<creationDate>2007 02 22</creationDate>

<author>Имя Автора</author>

<authorEmail> \n [email protected] Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

</authorEmail>

<authorUrl>www.autor.net</authorUrl>

<copyright>Копирайт</copyright>

<license>Лицензия</license>

<version>Component Version String</version>

<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 компонент. Каждый элемент очень прост в данный момент, но компонент уже обладает более большей гибкостью и возможностью.

 

Получение данных из базы

Модель компонента в настоящее время имеет один метод: getGreeting(). Этот метод очень прост - все, что эта функция делает - возвращает приветствие.

Для работы с базой данных, загрузим приветствие в таблицу базы данных.

При установке компонента необходимо создание таблицы с записью текстового поля с приветствием. Как создать SQL-файл и какие строки добавить в hello.xml, рассмотрим позже.

Для начала заменим код в Модели для получения приветствия с таблицы базы данных.

В первую очередь нужно подключится к базе данных. В Joomla 1.5 все параметры для подключения уже есть и для того чтобы создать свое используем следующее:

 

$db => JFactory::getDBO();

 

JFactory - статический класс, который используется, чтобы подключится к многим объектам системы. Подробней информацию об этом классе можно посмотреть в документации API.

Для подключению к базе данных используется метод getDBO.

Для получения приветствия необходимо сохранить запрос для получения объекта базы данных. Для этого вносим изменение для Модели в функции getGreeting(), находящейся в файле component/model/models/hello.php :

 

function getGreeting()

{

$db = JFactory::getDBO();

$query = 'SELECT greeting FROM #__hello';

$db->setQuery( $query );

$greeting = $db->loadResult();

return $greeting;

}

 

$db->loadResult() метод выполнит запрос к базе данных, и вернет полученный объект.

 

 

Создадим инсталляционный SQL-файл

Joomla 1.5 инсталлятор имеет встроенную поддержку выполнения SQL-запросов в процессе установки компонента. Эти запросы должны быть сохранены в стандартном install.sql файле.

Для инсталляционного файла SQL используем три запроса:

- Удаление таблицы на случай, если с таким именем уже существует.

- Создание таблицы и текстового поля для хранение строки приветствия.

- Загрузка строки приветствия в поле таблицы.

Ниже приведены все три запроса для инсталляционного файла:

 

DROP TABLE IF EXISTS `#__hello`;

 

CREATE TABLE `#__hello` (

`id` int(11) NOT NULL auto_increment,

`greeting` varchar(25) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;

 

INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'),

('Bonjour, Monde!'),

('Ciao, Mondo!');

 

Joomla сама заменит "#__ " на префикс таблицы текущей базы данных MySQL. в первом запросе уничтожается таблица #__hello, это необходимо для того, чтобы не было накладок при повторных установках одного и тоже компонента.

По второму запросу создается два поля в таблице. Первое поле `ID` - которое является ключом, гарантирующим уникальность записи. Второе поле `greeting` - строка длиной 25 символов, в которой будет хранится приветствие.

Сохраняем эти запросы в файле install.sql и переносим его в дистрибутив компонента по пути - com_hello/admin/install.sql.

 

Создадим деинсталляционный uninstall.sql файл

При деинсталляции компонента необходимо удалять таблицы, которые были созданы во время установки, но при этом нужно всегда учитывать, то что пользователь может случайно удалить компонент. Для того чтобы он таким образом не удалил свои данные в таблицах базы данных, необходимо требовать подтверждение такого действия:

 

DROP TABLE IF EXISTS `#__hello`;

 

Сохраняем эти запросы в файле uninstall.sql и переносим его в дистрибутив компонента по пути - com_hello/admin/uninstall.sql.

 

Заносим дополнение в инсталяционный файл hello.xml

Прежде чем указывать какие файлы использовать при установке и деинсталляции для запуска SQL-запросов нужно указать, куда копировать эти файлы. Оба файла должны находиться в корне папки административной части компонента. Далее указываем инсталлятору, какие файлы использовать для SQL-запроса при установке и деинсталляции компонента.

 

Новый код для инсталляционного 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>John Doe</author>

<authorEmail>[email protected]</authorEmail>

<authorUrl>http://www.example.org</authorUrl>

<copyright>Copyright Info</copyright>

<license>License Info</license>

<version>Component Version String</version>

<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/hello.php</filename>

</files>

<install>

<sql>

<file charset="utf8" driver="mysql">install.sql</file>

</sql>

</install>

<uninstall>

<sql>

<file charset="utf8" driver="mysql">uninstall.sql</file>

</sql>

</uninstall>

<administration>

<!-- Administration Menu Section -->

<menu>Hello World!</menu>

 

<!-- Administration Main File Copy Section -->

<files folder="admin">

<!-- Site Main File Copy Section -->

<filename>index.html</filename>

<filename>admin.hello.php</filename>

<filename>install.sql</filename>

<filename>uninstall.sql</filename>

</files>

</administration>

</install>

 

При инсталляции и деинсталляции у атрибута charset может быть два значения: первый - "utf8" и если версия MySql сервера не поддерживает кодировку utf8 указывается атрибут "non-utf8".

Атрибут driver пока может иметь только одно значение - "mysql". В дальнейшем планируется расширить возможности Joomla 1.5 для работы с разными базами данных.

Теперь компонент "Hello" может работать не только с MVC framework классами, но и с классами запросов JDatabase.


На рисунках 12.1, 12.2 показана установка созданного расширения.

 

Рисунок 12.1 – Установка модуля

Рисунок 12.2 – Сообщение об успешной установке

На рисунках 12.3 и 12.4 показано добавление ссылки на расширение в главное меню сайта.

Рисунок 12.3 – Ссылка на расширение в списке компонентов

Рисунок 12.4 – Добавление ссылки на компонент в главное меню сайта

На рисунке 12.5 показана работа созданного компонента на главной странице сайта.

Рисунок 12.5 – Отображение компонента на главной странице

Задание к работе:

Ознакомиться с теоретическим материалом.

Внести изменения в шаблон компонента CMS Joomla - файл com_hello3.zip.

Подключить компонент через панель управления.

Изучить работу компонента на главной странице сайта.

Оформить отчет согласно требованиям.

Отчет должен содержать:

Название и цель работы.

Ход работы с детальным описанием выполненных действий с рисунками.

Экранные формы браузера с загруженными страницами.

Выводы о проделанной работе.

 

Вопросы для подготовки к защите работы:

Чем отличается структура компонента без Модели и с Моделью?

Каким образом Представление обращается к Модели?

Каким образом компонент обращается к базе данных?


Лабораторная работа №10

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...