Обзор категорий
Несколько основных компонентов Joomla реализуют категории, позволяющие группировать записи, которые в чем-то похожи. Если вы разрабатываете компонент, вы можете легко включить функциональность категорий в свой компонент.
Вначале полезно рассмотреть, как категории хранятся в базе данных и связаны с ними. На диаграмме ниже в качестве примера приведены категории, связанные с com_contact
. Синие прямоугольники относятся к таблицам базы данных, желтые - к классам Joomla. Красные полосы предназначены для обозначения записей в таблице Категорий.
Таблица категорий Joomla разделена на "разделы", по одному разделу для каждого компонента, который использует категории. (Здесь "разделы" используются в широком смысле, не связанном, например, с техническим термином "раздел базы данных").
Внутри каждого раздела записи категорий хранятся в древовидной структуре, но всегда связаны с одним и тем же компонентом – например, у вас не может быть com_content
категория, которая имеет в качестве родительского элемента com_contact
Категория. Это обозначено на диаграмме стрелками слева, указывающими назад на тот же раздел. В корне дерева находится единый системный корневой узел, который является родительским для всех записей категорий верхнего уровня компонентов.
Если компонент Joomla поддерживает использование категорий, то в таблице базы данных компонента будет столбец, содержащий идентификатор категории. Таким образом, каждая запись компонента (по крайней мере, каждая запись, связанная с категорией) содержит идентификатор соответствующей записи категории (как внешний ключ). Все атрибуты категории хранятся в записи категории в таблице Категорий.
Это показано на диаграмме на примере com_contact
. Ссылка "один ко многим" из раздела таблицы категорий на таблицу Сведений о контактах указывает, что запись категории может быть связана со многими записями контактов.
Существует 2 класса Joomla (показаны желтым цветом), что связаны с категориями и которые предоставляют API для доступа к данным категорий:
- Категории – относится к разделу в таблице Categories. Объект Categories, экземпляр которого вы создаете, должен знать, к какому разделу таблицы categories вы хотите получить доступ, поэтому при его создании вам необходимо указать связанный компонент.
- CategoryNode – относится к отдельной записи категории. Получив объект Categories, вы можете получить доступ к объектам CategoryNode в этом разделе.
В вашем коде вы можете получить доступ к данным категории для нескольких компонентов, создав несколько экземпляров категорий, по одному для каждого компонента / раздела.