Модель-Вид-Контроллер часть 3 - использование БД

HTML / CSS

В первых двух частях мы научились строить простой model-view-controller компонент. В итоге в компоненте есть одно Представление (View ), которое получает данные от Модели, созданной в 2-ом уроке. Сейчас, будем работать с моделью получая данные с таблицы базы данных.

Будет продемонстрировано, как использовать класс JDatabase для работы с базой данных.

Получение Данных

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

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

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

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

$db =& JFactory::getDBO();
JFactory - статический класс, который используется, чтобы подключится к многим объектам системы. Подробней информацию об этом классе можно посмотреть в документации API.

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

Два шага для получение приветствия:

  1. Сохраняем запрос для получения объекта базы данных;
  2. Загружаем результат;

Для этого вносим изменение для Модели в методе getGreeting() (/models/hello.php):

function getGreeting()
{
$db =& JFactory::getDBO();
 
$query = 'SELECT greeting FROM #__hello';
$db->setQuery( $query );
$greeting = $db->loadResult();
 
return $greeting;
}

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

Создаем инсталляционный SQL файл (/admin/install.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=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'),
('Bonjour, Monde!'),
('Ciao, Mondo!');
Joomla сама заменит  "#__ " на префикс таблицы текущей базы данных MySQL. в первом запросе уничтожается таблица #__hello, это необходимо для того, чтобы не было накладок при повторных установках одного и тоже компонента.

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

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

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

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

DROP TABLE IF EXISTS `#__hello`;

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

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

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

Новый код для инсталляционного XML файла:

<?xml version="1.0" encoding="utf-8"?>
<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>john.doe@example.org</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>3.01</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the component ...</description>
 
<!-- Site 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 /site/ in the package -->
<files folder="site">
<filename>controller.php</filename>
<filename>hello.php</filename>
<filename>index.html</filename>
<filename>models/hello.php</filename>
<filename>models/index.html</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/default.php</filename>
<filename>views/hello/tmpl/index.html</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">
<filename>hello.php</filename>
<filename>index.html</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. Вы уже можете создавать компоненты работающее по технологии MVC с использованием таблиц базы данных указывая их параметры инсталлятору.


0