FL.ru – фриланс сайт удаленной работы №1. Поиск удаленной работы, фрилансеры.

Разработка Model-View-Controller компонента (MVC). Часть 4 — продолжение. Используем базу данных

Категории: Joomla

Получаем данные из БД

Как и раньше, Model использует метод getGreeting(). Как и раньше, getGreeting() просто возвращает нам строку приветствия Hello Mister (источник). Попробуем создать более информативное приветствие подгрузкой его из базы данных. Создание файла SQL и его добавление в XML файл будем рассматривать в следующих статьях, а пока мы произведем замену код возврата строки приветствия на код, который берет данные приветствия из БД. Первый пункт работы – получаем ссылку на базу данных. Так как база данных уже подключена и работает, создавать новое подключение нет нужды. Получить ссылку на базу можно следующим способом:

1
$db =& JFactory::getDBO();

Где JFactory — статический компонент, используемый для того, чтобы вызывать ссылки на существующие системные объекты. Название метода getDBO следует запомнить – это важно, и в дальнейшей работе мы будем этот метод использовать. Итак – ссылку мы получили, теперь необходимо получить данные из БД, которые будут прописываться в модели. Делаем так – сначала сохраняем наш запрос в БД (базу данных), а затем подгружаем результат. Метод getGreeting(), который мы будем применять, прописывается так:

1
2
3
4
5
6
7
8
9
10
function getGreeting()
{
 $db =& JFactory::getDBO();
 
 $query = 'SELECT greeting FROM #__hello';
 $db->setQuery( $query );
 $greeting = $db->loadResult();
 
 return $greeting;
}

где hello — имя таблицы в БД, эту таблицу мы создадим чуть попозже, а greeting — название имени поля. Метод $db->loadResult(), прописанный в нашем запросе, будет выполнять запрос базы данных, который уже сохранен, и возвращать первое поле первой строки полученного результата.

Создаем установочный файл SQL

Все создаваемые запросы записываются в текстовый файл. Установщик работает с приложениями, которые выполняют запросы SQL в процессе установки нашего компонента. В установочном файле существует три запроса – для удаления уже существующей таблицы, для создания новой, с новыми полями, и запрос для выполнения вставки данных в таблицу. Вот они:

1
2
3
4
5
6
7
8
9
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 будет заменяться на префикс нашей установки. Таблица по умолчанию будет называться jos_hello, но при создании таблицы ей можно присвоить любое другое имя. Joomla может работать с одной базой данных при проведении процесса из нескольких установок, при этом ошибок при совпадении имен одинаковых таблиц не будет. В БД, которую мы используем, существует два поля. Первое — это идентификатор, он обозначается как ключевой — primary key. Ключевой идентификатор применяется для идентификации уникальной записи. Оно также часто применяется для поиска строк в базе данных по идентификатору. Второе поле — greeting. В этом поле хранятся приветствия – как мы уже выяснили – в текстовом виде. Необходимо сохранить наши запросы в install.utf.sql файл.

Создаем SQL файл для удаления.

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

1
DROP TABLE IF EXISTS `#__hello`;

Сохраняем его в файле uninstall.utf.sql.

Обновление установочного файла XML

Необходимо будет подкорректировать несколько строк в установочном файле. В установочный список нужно добавить два новых файла, при этом SQL файлы должны быть в папке admin. Дальше – сообщаем установщику Joomla о том, что нужно запустить запросы в процессе установки или процессе удаления нашего компонента. Вот так будет выглядеть новый файл:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< ?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>29.02.2008</creationdate>
 <author>Kotofeich</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>
</install>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!-- 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>


1
2
3
4
5
6
7
8
9
10
11
<!-- 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>
 <filename>install.sql</filename>
 <filename>uninstall.sql</filename>
 </files>

Атрибуты в разделах <install> и <uninstall> — charset и driver в тэге <file>. Тип кодировки, используемой в компоненте – Charset. UTF-8 рекомендована как общераспространенная кодировка. При установке файла в другой кодировке (Windows-1251, ANSI и т.д.) этот атрибут необходимо изменить на требуемый. Определение базы, для которой были созданы запросы, происходит при помощи атрибута driver. На данный момент Joomla использует только mysql. Таким образом, мы создали новый компонент, соответствующий Model-View-Controller (MVC), который использует JDatabase. В следующей статье будем разбирать, как использовать AJAX в Joomla.




Подпишитесь на рассылку блога
max1net.com:
Уже подписались человек
Укажите свой e-mail