Подробное руководство по работе с базами данных в Joomla 1.5. Часть 1

Содержание материала

 

Большая часть данных из 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). Перед тем как использовать поле параметров, мы должны выбрать данные которые нужно хранить в нем. Данные должны соответствовать следующим критериям:

 

Пример схемы

 

Таблица нарисована для расширения названного 'My Extension' и записей названных обобщенно foobar. Имя таблицы будет #__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';

 

Поля даты

 

Очень часто используется поле типа datetime, хранящее дату и время некоторого события. Когда мы используем это поле, очень важно знать про эффект временных зон. Все даты и время должны быть сохранены в нулевом поясе UTC+0 (GMT / Z).

 

А уже при выводе на экран используем класс JDate.

 

Многоязычные требования

 

В кодировке UTF-8 количество бит на символ от 8 и более. К сожалению в MySql версиях до 4.1.2, один символ всегда занимает один байт, что вызывает некоторые проблемы. Единственное решение - это создать различные файлы sql запросов для различных версий MySql-серверов, поддерживающих и не поддерживающих кодировку UTF-8

 

Для MySql не поддерживающих данную кодировку мы должны задать увеличенный размер полей. Например, для поля varchar(20) лучше задать размер varchar(60). Размер поля увеличен в три раза, потому что большинство символов в кодировке UTF-8 занимают максимум 3 байта.

 

Но например поле varchar(100) мы должны были бы увеличить в три раза и получить varchar(300). Но это невозможно, так как максимальный размер - varchar(255). Единственный выход - это задать тип TEXT.

 

Для примера, ядро Joomla содержит таблицу #__content, хранящее поле title. Для MySql поддерживающих UTF-8 поле определяется как

 

'title' varchar(255) NOT NULL default ''

 

а для не поддерживающих

 

'title' text NOT NULL default ''
Меню

Главная

Компьютерная помощь
Ремонт компьютеров
Ремонт ноутбуков
Заправка картриджей

Сис-админу

Ноутбуки (11)
Windows (22)
*nix (1)

Веб-мастеру

HTML (7)
CSS (10)
Java Script (2)
XML (2)
DLE (2)
Joomla (17)
ModX (1)
Drupal (1)

Контакты


+7 (904) 214 82 20
подробнее