JOOMLA MASTER

Изучаем CMS Joomla на примерах

### Новое:

- Бесплатный курс по jQuery
- Как создавать сплывающие надписи, ссылки и иконки на рисунках
- Компонент администратора JCE
- Как сделать заголовок статьи ссылкой?
- Как изменять количество отображаемых материалов на странице категории?

Урок 4. Использование Базы Данных (Основы программирования для Joomla 1.5) |  |

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

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

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

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

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

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

$db => JFactory::getDBO();

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

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

- сохранение нашего запроса в классе БД
- загрузка результата

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

view source
print?
`01.``function` `getGreeting()`
`02.``{`
`03.``` `$db` `=& JFactory::getDBO();`
`04.```
`05.``` `$query` `=` `'SELECT greeting FROM #__hello'``;`
`06.``` `$db``->setQuery(` `$query` `);`
`07.``` `$greeting` `=` `$db``->loadResult();`
`08.```
`09.``` `return` `$greeting``;`
`10.``}`

Здесь hello - это имя таблицы в базе данных, которую мы создадим позже, а greeting - это имя поля в таблице. Если Вы не знакомы с SQL, то вам нужно почитать руководство по нему. Хорошим руководством на примерах есть видео-курс «PHP+MySQL для начинающих», подробно ознакомится и купить который можно по ссылке: http://joomla-master.com/phpmysql.htm.

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

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

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

В нашем файле установки будут три запроса:

- удаление таблицы, если она уже существует
- создание таблицы с необходимыми полями
- вставка данных (строки приветствия).

Вот наши запросы:

view source
print?
`01.``DROP` `TABLE` `IF EXISTS `#__hello`;`
`02.```
`03.``CREATE` `TABLE` ``#__hello` (`
`04.``` ``id`` `int``(11)` `NOT` `NULL` `auto_increment,`
`05.``` ``greeting`` `varchar``(25)` `NOT` `NULL``,`
`06.``` `PRIMARY` `KEY` `(`id`)`
`07.``) ENGINE=MyISAM AUTO_INCREMENT=0` `DEFAULT` `CHARSET=utf8;`
`08.```
`09.``INSERT` `INTO` ``#__hello` (`greeting`)` `VALUES` `(``'Hello, World!'``),`
`10.``(``'Bonjour, Monde!'``),`
`11.``(``'Ciao, Mondo!'``);`

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

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

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

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

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

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

## Заносим дополнение в файл установки hello.xml

В файле hello.xml нужно добавить наши два новых файла в список установки. Файлы SQL должны находиться в папке admin.

Также нам нужно сказать установщику, чтобы он запустил запросы при установке и удалении компонента.

Наш новый файл hello.xml выглядит так:

view source
print?
`01.``<?``xml` `version``=``"1.0"` `encoding``=``"utf-8"``?>`
`02.`
`03.``<``install` `type``=``"component"` `version``=``"1.5.0"``>`
`04.``` `<``name``>Hello</``name``>`
`05.``` `<!-- The following elements are optional and free of formatting conttraints -->`
`06.``` `<``creationdate``>29.02.2008</``creationdate``>`
`07.``` `<``author``>Kotofeich</``author``>`
`08.``` `<``authoremail``></``authoremail``>`
`09.``` `<``authorurl``>http://www.example.org<;/``authorurl``>`
`10.``` `<``copyright``>Copyright Info</``copyright``>`
`11.``` `<``license``>License Info</``license``>`
`12.``` `<!-- The version string is recorded in the components table -->`
`13.``` `<``version``>Component Version String</``version``>`
`14.``` `<!-- The description is optional and defaults to the name -->`
`15.``` `<``description``>Description of the component ...</``description``>`
`16.```
`17.``` `<!-- Site Main File Copy Section -->`
`18.``` `<``files` `folder``=``"site"``>`
`19.``` `<``filename``>index.html</``filename``>`
`20.``` `<``filename``>hello.php</``filename``>`
`21.``` `<``filename``>controller.php</``filename``>`
`22.``` `<``filename``>views/index.html</``filename``>`
`23.``` `<``filename``>views/hello/index.html</``filename``>`
`24.``` `<``filename``>views/hello/view.html.php</``filename``>`
`25.``` `<``filename``>views/hello/tmpl/index.html</``filename``>`
`26.``` `<``filename``>views/hello/tmpl/default.php</``filename``>`
`27.``` `<``filename``>models/hello.php</``filename``>`
`28.``` `</``files``>`
`29.``` `<``install``>`
`30.``` `<``sql``>`
`31.``` `<``file` `charset``=``"utf8"` `driver``=``"mysql"``>install.sql</``file``>`
`32.``` `</``sql``>`
`33.``` `</``install``>`
`34.``` `<``uninstall``>`
`35.``` `<``sql``>`
`36.``` `<``file` `charset``=``"utf8"` `driver``=``"mysql"``>uninstall.sql</``file``>`
`37.``` `</``sql``>`
`38.``` `</``uninstall``>`
`39.``` `<``administration``>`
`40.``` `<!-- Administration Menu Section -->`
`41.``` `<``menu``>Hello World!</``menu``>`
`42.```
`43.``` `<!-- Administration Main File Copy Section -->`
`44.``` `<!-- Note the folder attribute: This attribute describes the folder`
`45.``` `to copy FROM in the package to install therefore files copied`
`46.``` `in this section are copied from /admin/ in the package -->`
`47.``` `<``files` `folder``=``"admin"``>`
`48.``` `<!-- Site Main File Copy Section -->`
`49.``` `<``filename``>index.html</``filename``>`
`50.``` `<``filename``>admin.hello.php</``filename``>`
`51.``` `<``filename``>install.sql</``filename``>`
`52.``` `<``filename``>uninstall.sql</``filename``>`
`53.``` `</``files``>`
`54.``` `</``administration``>`
`55.``</``install``>`

Обратите внимание на атрибуты в тэге <file> в разделах <install> и <uninstall>. Это charset и driver. Charset - это тип используемой кодировки. Для Joomla рекомендуется использовать только utf8. Если вы хотите создать файл установки другой кодировки (для старых версий MySQL), вы должны изменить этот атрибут. Атрибут driver определяет, для какой базы данных были написаны запросы. В настоящее время, это может быть только mysql, но в будущих версиях Joomla может быть больше доступных драйверов базы данных.
Теперь наш компонент может работать не только с MVC framework классами, но и с классами запросов JDatabase для работы с базой данных.

Архив исходных файлов для этого урока можно скачать по этой ссылке:
http://joomla-master.com/com_hello_4.zip

Предыдущие уроки по Основах программирования для Joomla 1.5:

Введение

Урок 1. Основы функционирования Joomla 1.5

Урок 2. Создание простейшего компонента для Joomla 1.5

Урок 3. Добавление Модели

﻿ JOOMLA MASTER; WEB Хостинг