Найти в Дзене
NEWQOS

Создание модуля F.A.Q для Joomla своими руками

Оглавление

ВВЕДЕНИЕ

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

В частности в этой статье мы рассмотрим создание модуля вопросов и ответов. Я искал в интернете, нашел кучу статей о создании модулей в принципе, но ни одного, который бы подходил под мои нужды. Поэтому было принято решение написать об этом статью.

Используемые навыки: html, css, bootstrap v4, php, xml, joomla

Что вы узнаете:

  • Файловая структура модуля Joomla
  • Использование поля subform
  • Принципы и порядок создания модулей

Создание модуля F.A.Q. для CMS Joomla

Прежде, чем мы непосредственно приступим к разработке модуля - прочитайте оговорки (это важно на самом деле):

  1. Правильным было бы упаковать все стили и JS-скрипты в сам модуль, как это сделать - я обязательно напишу, а в данном конкретном примере мне это не нужно, поскольку я писал реальный модуль под реальный шаблон, и все стили модуля - уже есть в шаблоне, дублировать их не имеет смысла.
  2. При разработке модуля правильным будет создавать языковые файлы и прописывать константы. Я опять же не стал этого делать, почему - потому что на данный момент мне это не нужно.
  3. Я не использовал в модуле вспомогательный класс helper, поскольку модуль совсем простенький.

Остальное будем рассматривать по ходу статьи.

Техническое задание

И так, наша задача заключается в следующем: необходимо разработать модуль вопросов и ответов (F.A.Q.) для CMS Joomla. Его задача - выводить вопросы и ответы согласно имеющемуся статичному html-шаблону. Также в админке должна быть реализована возможность быстрого добавления вопросов и ответов на них. Вот в принципе и все, а ниже скриншот того, что нам необходимо получить:

-2

HTML-код модуля, который мы будем реализовывать выглядит следующим образом:

-3

Теперь давайте разберем подробнее, что же мы видим. А видим мы что наш модуль использует классы Bootstrap. Также мы видим, что каждый  вопрос и ответ на него расположены в блоке card и что эти блоки повторяются:

-4

Теперь давайте посмотрим, что же именно нам нужно менять в каждом из блоков, а что можно оставить в шаблоне:

  1. Нам нужно вбивать вопрос в админке
  2. Нам нужно вбивать ответ в админке

Это самое основное, но помимо этого мы видим в нашем коде несколько ID:

-5

И так, первый из них - это ID блока с вопросом id="headingOne", этот же ID дублируется в  ответе в атрибуте aria-labelledby="headingOne". Атрибут aria-labelledby предназначен для связи между объектами и метками, он содержит ID меток для того, чтобы вспомогательные технологии (средства чтения экрана и т.д.) могли собрать все метки в каталог. Поэтому нам обязательно нужно, помимо вопроса и ответа, поле ID.

Второй идентификатор, который мы видим в data-target="#collapseOne" - дублируется еще в двух местах, и если вы заглянете в документацию Bootstrap, то увидите, что благодаря именно этому идентификатору у нас работает collapse, то есть схлопывание/развертывание. Если, к примеру, мы возьмем data-target с первого вопроса и назначим этот ID третьему ответу, то при нажатии на первый вопрос нам откроется третий ответ.

Также внизу в коде мы видим еще и два изображения плюс описания для них. Для них мы тоже создадим возможность редактирования с админки.

Подытожим: нам в админке модуля должны быть доступны следующие вещи:

  1. Написать вопрос
  2. Написать ответ на этот вопрос
  3. Написать ID для data-target
  4. Написать ID для aria-labelledby
  5. Выбрать изображения
  6. Написать два описания для них

На этом пока все, но к нашему исходному шаблону мы еще вернемся.

Файловая структура модуля для Joomla

Файловая структура стандартного модуля имеет следующий вид:

- mod_faq.xml

- mod_faq.php

- helper.php

- tmpl

-- default.php

mod_faq.xml - это файл-манифест, он содержит всю информацию о модуле, файлы, которые должны быть установлены, а также параметры конфигурации модуля.

mod_faq.php - единая точка входа для модуля, он вызывает helper, а также подключает макет вывода модуля, кроме этого там же мы подключаем стили и так далее

helper.php - файл, который содержит вспомогательный класс для выполнения необходимых расчетов, обращения к БД и так далее

tmpl - папка с файлами макетов

default.php - макет вывода информации

В нашем случае файловая структура будет немного другой:

- mod_faq.xml

- faq_field.xml

- mod_faq.php

- tmpl

-- default.php

Мы убрали helper, поскольку у нас простой модуль, и можно обойтись без вспомогательного класса, а все необходимые скрипты выполнить либо в mod_faq.php (мы так и сделаем), либо даже в default.php. Кроме того, как я говорил выше - мы не будем подключать стили нашего модуля, поскольку пишем модуль для имеющегося шаблона, в котором эти стили уже есть, нам остается только написать классы и все. По этой же причине я не стал использовать конструкцию  $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx')); , которая получает суффикс класса модуля из параметров (Внимание: по хорошему следовало бы ее использовать, поскольку вполне вероятно, что в дальнейшем вы захотите добавить какие-то классы для модуля).

faq_field.xml - специальный файл, который мы затронем позже, пока что просто создайте его и все.

Полностью статью читайте по адресу