Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом Телицкий.doc
Скачиваний:
206
Добавлен:
09.02.2016
Размер:
4.72 Mб
Скачать

2.2.2 Работа с базами данных в cms Joomla V.1.5.8

Большая часть данных из Joomla храниться в базе данных. После установки Joomla создает 35 таблиц. Некоторые из этих таблиц принадлежат различных расширениям ядра Joomla. Получим доступ к базе данных Joomla с помощью глобального объекта JDatabase. JDatabase - это абстрактный класс, который позволяет работать с различными драйверами баз данных. На данный момент Joomla содержит только два драйвера - MySQL и MySQLi. Получим доступ к глобальному объекту JDatabase используя JFactory:

$db =& JFactory::getDBO();

Префикс

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

Схема соглашений

Когда мы создаем таблицы для своих расширений, мы должны придерживаться некоторых стандартов. Самое важное - это правильное именование таблиц. Все названия таблиц должны начинаться с префикса и содержать вначале имя расширения. Если таблиц у расширения несколько, то мы добавляем в имени таблице после названия расширения символ подчеркивания "_" и пишем дополнительное произвольное название. Например таблица для компонента "My Еxtensions" может быть названа #__myextension_items. Имена таблиц должны быть в нижнем регистре и только по-необходимости разделятся символом подчеркивания. Например, вы можете назвать поле хранящее адрес почты как email. Если вы имеете первичное и вторичное поле email (primary и secondary), то вы должны назвать поля email и email_secondary; неправильно будет называть первичное поле email_primary. Если у вас имеется ключевое поле ID, то оно обязательно должно быть типа integer, автоинкрементное и с не иметь пустого значения.

Общепринятые поля таблицы

Мы можем использовать несколько зарезервированных полей в нашей таблице. Используя эти поля, мы получаем над ними дополнительное управления с помощью фрэймворка Joomla. Как этим пользоваться будет написано ниже (с помощью класса JTable). Итак, это поля: Publishing - поле указывает, опубликован ли элемент, или нет. Имеет тип tinyint(1) и два значения 0 - неопубликован, 1 - опубликован. Hits - отображает сколько обращений было к записе. Имеет тип integer и значение по-умолчанию 0. Checking Out - на слуйчай если запись могут редактировать несколько пользователей, мы можем блокировать ее с помощью этого поля. Для этого используется два поля checked_out и checked_out_time. checked_out имеет тип integer и содержит ID пользователя обратившегося к записе. checked_out_time имеет тип datetime и содержит дату и время обращения пользователя к записе. Если дата содержит значение null и id пользователя равен 0, то запись не заблокирована. Ordering - нам часто будет нужно разрешить администратору указать по какому полю произвести сортировку. Поле ordering имеет тип integer, и может быть использовано для указания колличества записей участвующих в сортировке и выводимых на экран. Это поле необязательно должно быть уникальным, и может быть использовано в запросе WHERE. Parameter Fields - мы часто будем использовать поле параметров, по-умолчанию названное params и имеющее тип TEXT, для сохранения дополнительной информации о записях. Данные хранящиеся в этих полях закодированы как INI строки (которые мы обрабатываем в дальнейшем с помощью класса JParameter). Перед тем как использовать поле параметров, мы должны выбрать данные которые нужно хранить в нем. Данные должны соответствовать следующим критериям:

  • Не использоваться в сортировках

  • Не использоваться в поиске

  • Существовать только для некоторых записей

  • Не участвовать в межтабличных связях

Пример схемы

Таблица 5 нарисована для расширения названного 'My Extension' и записей названных обобщенно foobar. Имя таблицы будет #__myextension_foobars.

Таблица 5

Таблица с именем: #__myextension_foobars

Поле

Тип

NOT NULL

AUTO INC

UNSIGNED

По-уомлчанию

id

INTEGER

+

+

+

NULL

content

TEXT

+

checked_out

INTEGER

+

+

0

checked_out_time

DATETIME

+

0000-00-00 00:00:00

params

TEXT

+

ordering

INTEGER

+

+

0

hits

INTEGER

+

+

0

published

TINYINT(1)

+

+

0

Эта таблица использует все зарезервированные поля и одно автоинкрементное ключевое поле ID. SQL запрос который создаст таблицу описанную в схеме выше:

CREATE TABLE '#__myextension_foobars' (

'id' INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT,

'content' TEXT NOT NULL DEFAULT '',

'checked_out' INTEGER UNSIGNED NOT NULL DEFAULT 0,

'checked_out_time' DATETIME NOT NULL DEFAULT '0000-00-00

00:00:00',

'params' TEXT NOT NULL DEFAULT '',

'ordering' INTEGER UNSIGNED NOT NULL DEFAULT 0,

'hits' INTEGER UNSIGNED NOT NULL DEFAULT 0,

'published' INTEGER UNSIGNED NOT NULL DEFAULT 0,

PRIMARY KEY('id')

)

CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';