В этой статье будет рассказано о создании плагина, который объясняет возможности Joomla 2.5 создавать дополнительные поля формы к статьям. Для этого придётся создать отдельный плагин и установить патч изменяющий компонент "Менеджер статей".
Функции создаваемого плагина:
- Добавление дополнительного поля к статье в бакэнде сайта;
- Добавление дополнительного поля к статье в фронтэнде сайта;
- Сохранение данных вновь создаваемого поля в базе данных;
- Вывод полей с использованием собственной разметки на страницах сайта (до вывода текста статьи);
Пример
Для примера у нас будут данные браться "структура", "температура", "вкус":
При этом данные будут доступны как в бакэнде так и во фронтэнде сайта.
Админ раздел
Сайт
Framework
В Joomla менеджер статей как бакэнде так и во фронтэнде сайта является обычным компонентом, при обработке формы происходят следующие действия:
- Загрузка структуры формы в XML
- Загрузка данных из базы
- Вставка данных в поля формы
- Отображение формы в HTML разметке
При сохранении фреймовик Joomla выполняет следующие действия:
- Перехватывае отправляемые даннные
- Загружает описание полей формы
- Осуществляет валидацию полей формы и данных
- При ошибки валидации сохраняет данные во временное состояние
- Либо добавляет данные в базу
Фреймовик Joomla для каждого из указанных этапов предусматривает соотвтсвующие хуки:
onContentPrepareForm()
выполняется, когда происходит загрузка описания форм;
onContentPrepareData()
выполняется, когда происходит загрузка статьи из базы данных с заполнением полей формы;
onContentAfterSave()
выполняется, когда происходит сохраннеие данных в базу, этот хук будет использоваться для сохранения дополнительных данных в плагине в талицу #__user_profiles (автор);
onContentAfterDelete()
запускается когда происходит удаление статьи, этот хук будет использоваться для удаление дополнительных данных;
onContentPrepare()
запускается когда происходит отображение статьи (во фронтэнде(автор)), данный хук используется для отображение дополнительных данных;
База данных
Контент дополнительных полей статьи должен сохранятся в базу данных. Для этого можно использовать дополнительные таблица базы данных. В Joomla 2.5 можно расширять профиль пользователя дополнительными полями. Они сохраняются в таблицу " #__user_profiles". Данный плагин будет использовать таблицу #__user_profiles и столбцы "user_id" как "article_id".
Структура нашего плагина:
── plugins/content/rating ├── language │ └── en-GB │ ├── en-GB.plg_content_rating.ini [language file] │ └── en-GB.plg_content_rating.sys.ini [language file] ├── rating │ ├── rating.css [CSS for the rendered rating table] │ └── rating.xml [Form description] ├── rating.php [Plugin hooks] └── rating.xml [Manifest]
Установочный файл
Языковой файл
CSS
Дополнительные поля формы
Хуки плагина
Главный файл плагина 'rating.php' содержит следующие хуки выполняемые фреймовиком:
Все хуки будет содержаться следующие объекты:
- $context
- $data – параметр, содержащий данные полей формы
- $article (JTableContent) содержит статью
__construct
Конструктор загружает языковой файл:
onContentPrepareForm
onContentPrepareForm добавляет дополнительные поля в формы статей. Загружает фрагмент формы из "rating/rating.xml"
onContentPrepareData
onContentPrepareData собирает данные после загрузки статьи (из #__content). Так же он объединяет данные дополнительных полей из таблицы #__user_profiles.
onContentAfterSave
onContentAfterSave сохраняет данные дополнительных полей в базу данных.
onContentAfterDelete
onContentAfterDelete выполняется при удалении статьи, удаляет данные из дополнительных полей.
onContentPrepare
onContentPrepare при подготовке вывода статьи, переменна $params содержит параметры статьи, $this->params - параметры плагина. Эта функция выводит дополнительные поля в начале статьи на сайте.