Модель-Вид-Контроллер часть 3 - использование БД
В первых двух частях мы научились строить простой model-view-controller компонент. В итоге в компоненте есть одно Представление (View ), которое получает данные от Модели, созданной в 2-ом уроке. Сейчас, будем работать с моделью получая данные с таблицы базы данных.
Будет продемонстрировано, как использовать класс JDatabase для работы с базой данных.
Получение Данных
Наша модель в настоящее время имеет один метод: getGreeting (). Этот метод очень прост - все, что эта функция делает - возвращение жестко-закодированное приветствие.
Для работы с базой данных, загрузим приветствие в таблицу базы данных.
При установке компонента необходимо создание таблицы с записью текстового поля с приветствием. Как создать SQL файл и какие строки добавить в hello.xml, рассмотрим позже.
Для начала заменим код в Моделе для получения приветствия с таблицы базы данных.
В первую очередь нужно подключится к базе данных. В Joomla 1.5 все параметры для подключения уже есть и для того чтобы создать свое используем следующее:
$db =& JFactory::getDBO();
Для подключению к Базе данных используется метод getDBO.
Два шага для получение приветствия:
-
Сохраняем запрос для получения объекта базы данных;
- Загружаем результат;
Для этого вносим изменение для Модели в методе 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!');
По второму запросу создается два поля в таблице. 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>
Атрибут driver пока может иметь только одно значение - "mysql". В дальнейшем планируется расширить возможности Joomla 1.5 для работы с разными Базами данных.
Заключение
Теперь компонент "Hello" может работать не только с MVC framework классами, но и с классами запросов JDatabase. Вы уже можете создавать компоненты работающее по технологии MVC с использованием таблиц базы данных указывая их параметры инсталлятору.
10
Комментарии
15.12.2010 20:16
19.05.2011 00:31
09.08.2011 12:58
27.02.2012 18:29
hello.php
index.html
install.sql
uninstall.sql
нужно заменить hello.php на admin.hello.php, похоже...
27.02.2012 18:31
Я имела ввиду в блоке administration->files
RSS лента комментариев этой записи