В этом уроке мы будем работать с моделью. Вместо данных, содержащихся в коде модели, модель будет брать данные из бд. Вы узнаете как пользоваться классом JDatabase.

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

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

Сделаем приветствие более интересным, загрузив его из БД. Как создать SQL файл, и добавить его в XML мы продемонстрируем позже. Пока, мы просто заменим наш код возвращения строки кодом, который возьмет строку приветствия из базы данных.

На первом шаге мы получим ссылку на объект базы данных. Joomla использует базу данных для многих операций, т.е. подключение к базе данных уже существует; поэтому, нет необходимсти создать ваше собственное. Ссылка на БД может быть получена так:

$db =& JFactory::getDBO();

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

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

  • сохранение нашего запроса в классе БД
  • загрузка результата
Наш новый метод getGreeting() выглядит так:

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

hello - это имя таблицы в базе данных, которую мы создадим позже, а greeting- это имя поля. Если Вы не знакомы с SQL, то вам нужно почитать руководство по нему.

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

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

Установщик приложений в Joomla поддерживает выполнение 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 заменит на префикс текущей установки. По-умолчанию, таблица будет названа jos_hello. Joomla позволяет использовать одну базу данных при работе с несколькими установками Joomla, и при этом избежать ошибок при одинаковых именах таблиц.

В нашей БД имеются два поля. Первое поле -это id, и оно называется ключевым (primary key). Ключевое поле используется для уникальной идентификации записи. Оно часто используется для поиска строк в БД. Другое поле - это greeting. Это поле хранит тексты приветствий.
Сохраним наши запросы в файл install.utf.sql.

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

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

DROP TABLE IF EXISTS `#__hello`;

Сохраним этот запрос в файл uninstall.utf.sql.

Обновим XML файл установки

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

<?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>
 
 <!-- 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 -->
 <!-- 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>     
 </administration>
</install>

Обратите внимание на атрибуты в тэге <file> в разделах <install> и <uninstall> - это charset и driver. Charset - это тип используемой кодировки. Рекомендуется использовать только utf8. Если вы хотите создать файл установки другой кодировки (для старых версий MySQL), вы должны изменить этот атрибут.

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

Заключение
Теперь мы имеем компонент, который соответствует структуре MVC и использует классы JDatabase.


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

You have no rights to post comments