Создание дополнительного элемента формы к статье Joomla

Опубликовано admin - пн, 07/22/2013 - 21:34

В этой статье будет рассказано о создании плагина, который объясняет возможности Joomla 2.5 создавать дополнительные поля формы к статьям. Для этого придётся создать отдельный плагин и установить патч изменяющий компонент "Менеджер статей".

Функции создаваемого плагина:

  • Добавление дополнительного поля к статье в бакэнде сайта;
  • Добавление дополнительного поля к статье в фронтэнде сайта;
  • Сохранение данных вновь создаваемого поля в базе данных;
  • Вывод полей с использованием собственной разметки на страницах сайта (до вывода текста статьи);

Пример

Для примера у нас будут данные браться "структура", "температура", "вкус":

При этом данные будут доступны как в бакэнде так и во фронтэнде сайта.

Админ раздел

joomla

Сайт

joomla

Framework

В Joomla менеджер статей как бакэнде так и во фронтэнде сайта является обычным компонентом, при обработке формы происходят следующие действия:

  • Загрузка структуры формы в XML
  • Загрузка данных из базы
  • Вставка данных в поля формы
  • Отображение формы в HTML разметке

При сохранении фреймовик Joomla выполняет следующие действия:

  • Перехватывае отправляемые даннные
  • Загружает описание полей формы
  • Осуществляет валидацию полей формы и данных
  • При ошибки валидации сохраняет данные во временное состояние
  • Либо добавляет данные в базу

Фреймовик Joomla для каждого из указанных этапов предусматривает соотвтсвующие хуки:

onContentPrepareForm()

выполняется, когда происходит загрузка описания форм;

onContentPrepareData()

выполняется, когда происходит загрузка статьи из базы данных с заполнением полей формы;

onContentAfterSave()

выполняется, когда происходит сохраннеие данных в базу, этот хук будет использоваться для сохранения дополнительных данных в плагине в талицу #__user_profiles (автор);

onContentAfterDelete()

запускается когда происходит удаление статьи, этот хук будет использоваться для удаление дополнительных данных;

onContentPrepare()

запускается когда происходит отображение статьи (во фронтэнде(автор)), данный хук используется для отображение дополнительных данных;

База данных

Контент дополнительных полей статьи должен сохранятся в базу данных. Для этого можно использовать дополнительные таблица базы данных. В Joomla 2.5 можно расширять профиль пользователя дополнительными полями. Они сохраняются в таблицу " #__user_profiles". Данный плагин будет использовать таблицу #__user_profiles и столбцы "user_id" как "article_id".

jomla

Структура нашего плагина:

── 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 - параметры плагина. Эта функция выводит дополнительные поля в начале статьи на сайте.

На разработку сайта! Скидки до 20%!