Как сделать плагин для joomla 3

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Создадим собственный модуль для Joomla 2.5 - 3.0. Данный материал, предоставляет описание того, как конструируются модули. Желательно после изучения, рассмотреть действующие модули в качестве примера.

Для этого создадим каталог и положим туда любой файл index.html, чтобы избежать прямого попадания в директорию.

Например модуль будет называться mod_name. Его задача будет отобразить список пользователей, количество которых будет задаваться в административной панели управления модулем.

Все модули Joomla имеют префикс mod_, после которого идет название модуля.

Минимальный набор файлов для полноценной работы модуля:

Данный модуль использует архитектуру MVC(Model, View, Controller — Модель, Представление, Контроллер).

Мы отделяем логику модуля(контроллер) в файл helper.php, чтобы вся работа с данными производилась только там.

Представление (View) - это шаблон который будет отображаться на web-странице, вынесем в папку tmpl/default.php. Сюда же помещяются изображения, стили.

Файл helper.php

Он является по сути "моделью" для получения данных, этот файл содержит в себе один класс - ModMymodulHelper, который содержит функцию getItems принимающую параметры и использует их в своей работе.

Введение в создание собственного плагина для CMS Joomla 4

Структура плагина для Joomla! 1.5, 2.5 и 3.x были очень гибкими и мощными. Плагины могут использоваться не только для обработки событий, вызванных основным приложением и расширениями, но и для расширения имеющихся и расширения сторонних расширений. В Joomla 4.x была переписана большая часть системы диспетчеризации, чтобы еще больше повысить гибкость при изменении параметров, передаваемых в виде событий, одновременно повышая производительность плагинов.

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

Создание файла-манифеста плагина для CMS Joomla 4

Как и все расширения в Joomla, плагины легко устанавливаются в виде zip-файла (.tar.gz также поддерживается), но должен быть включен правильно отформатированный XML-файл с манифестом устанавливаемого расширения.

В качестве примера приведем установочный файл XML для плагина поиска категорий:

Как вы можете видеть, система похожа на другие установочные XML-файлы CMS Joomla. Вам нужно только обратить внимание на запись group="xxx" в теге и расширенную информацию в теге . Эта информация сообщает Joomla, в какую папку скопировать файл и в какую группу следует добавить плагин.

Если вы создаете плагин, который реагирует на существующие основные события, атрибут group="xxx" будет изменен, чтобы отразить имя существующей папки плагина для типа события, который вы хотите расширить. Например, group="authentication" или group="user" . Полный список существующих категорий основных событий см. в разделе Плагин/События официальной документации Joomla (Прим.переводчика: Который по какой-то причине отсутствует и дополнительно смотреть фактически нечего). При создании нового плагина для реагирования на основные события важно, чтобы имя вашего плагина было уникальным и не конфликтовало ни с одним из других плагинов, которые также могут реагировать на основное событие, которое вы хотите обслуживать.

Если вы создаете плагин для реагирования на неосновные системные события, ваш выбор для тега group="xxx" должен отличаться от любой из существующих основных категорий.

СОВЕТ: Если вы добавите атрибут method="upgrade" в тег extension , этот плагин можно установить без удаления более ранней версии. Все существующие файлы будут перезаписаны, но старые файлы не будут удалены.

Создание плагина для CMS Joomla 4

В Joomla 4 вы также можете иметь код пространства имен в своем плагине - пожалуйста, прочитайте Соглашения о пространстве имен в Joomla 4. Обратите внимание, что основной файл плагина не имеет пространства имен, а только файлы, работающие с полями и любой другой вспомогательный код.

Объектно-ориентированный способ написания плагинов включает в себя написание подкласса CMSPlugin, базового класса, реализующего основные свойства плагинов. В ваших методах доступны следующие свойства:

  • $this->params : параметры, установленные для этого плагина администратором
  • $this->_name : имя плагина
  • $this->_type : группа (тип) плагина
  • $this->db : объект db (базы данных)
  • $this->app : объект приложения

СОВЕТ: Чтобы использовать $this->db и $this->app , CMSPlugin проверяет, существует ли свойство и не является оно приватным. Если требуется, чтобы объекты по умолчанию использовались, создайте не созданные свойства в классе плагина (т.е. protected $db; protected $app; в той же области, что и protected $autoloadLanguage = true; ). Свойства не будут существовать, если они не будут созданы явно.

В следующем примере кода

представляет его имя. Обратите внимание, что имена классов и функций в PHP не зависят от регистра.

Мы также реализуем здесь интерфейс SubscriberInterface , который является основным изменением по сравнению с Joomla 1.5-3.x. Вместо того, чтобы имя функции автоматически обнаруживалось и совпадало с именем события, это позволяет вам иметь пользовательские имена функций. Это позволяет нам сказать, какие плагины реализуют какие функции, и поскольку разбор общедоступных методов в PHP-коде происходит медленно, это значительно повышает производительность.

Примечание.Во всей серии Joomla 4 существует устаревший слой, который будет охватывать плагины, использующие старую стратегию именования, когда имена плагинов совпадают с именем события, когда SubscriberInterface не реализован.

Использование готовых плагинов. Как вызвать плагин в коде Joomla 4

Если вы создаете плагин для нового, непрофильного события, не забудьте активировать его после установки в админке. Перед любой ссылкой на ваш новый плагин используйте команду JPluginHelper::importPlugin() .

Теперь, когда вы создали свой плагин, вы, вероятно, захотите вызвать его в своем коде. Возможно, нет: ядро Joomla имеет ряд встроенных событий, на которые вы можете зарегистрировать свой код плагина (и в этом случае вы можете игнорировать этот раздел).

Новый способ работы с плагинами в CMS Joomla 4

Если вы хотите разрешить пользователю изменять значения, вы можете использовать результат события и получить результаты из getResults . Вы можете делать так:

Почему мы ввели этот класс имени над параметрами? Что ж, это облегчает введение пользовательских установщиков и геттеров для свойств - в настоящее время плагин может либо полностью изменить свойство по своему усмотрению - для компонентов нет никакого способа налагать какие-либо ограничения. Кроме того, это значительно облегчает разработчикам добавление и удаление параметров в событии без серьезных b/c проблем (поскольку теперь вы вызываете определенные методы и не подчиняетесь свойству, являющемуся 2-м аргументом вашей функции).

Как добиться максимальной совместимости с Joomla 3

Если вы хотите вызвать событие аналогично устаревшему J3.x JEventDispatcher , то используйте такой код:

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

Обратите внимание, что если КАКОЙ-ЛИБО плагин в группе не реализует интерфейс SubscriberInterface , то свойство result (как именованный параметр, так и результат плагина) используется как специальное свойство и не может быть использовано иначе.

В этом уроке будет поэтапно разобран процесс создания собственного модуля с нуля для CMS Joomla 3+.

Данный урок будет требовать от вас хотя бы небольших знаний программирования.

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

Этапы создания модуля

1. Создание файловой структуры

Чтобы создать рабочий модуль на Joomla! должна быть соблюдена четкая иерархия файлов.

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


tmpl - папка фронтенда, в ней создаются файлы, которые отвечают за представление модуля на сайте.

helper.php - основной файл обработки, в котором прописывается весь исходный код работы модуля.

mod_last_articles.php - файл который объединяет представление и логику обработки.

mod_last_articles.xml - файл в котором прописываются данные для работы в Joomla!, информация о папках и файлах, а также настройки.

ru-RU.mod_last_articles.ini - файл, в которых прописываются языковые переменные для русского языка

ru-RU.mod_last_articles.sys.ini - файл, в которых прописываются дополнительные языковые переменные для русского языка

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


2. Наполнение файла xml

Перед созданием любого модуля необходимо в специальном файле mod_last_articles.xml прописать всё необходимую информацию об этом модуле.

Эти данные необходимы для успешной установки и работы модуля под CMS Joomla!

1. В верхней строчке необходимо прописать тег xml который указывает формат файла.
2. Далее идет тег - в атрибутах которого нужно прописать тип, версию, клиент и метод.
3. Внутри тега extension прописываются все данные о шаблоне.
Вверху указывается: имя, автор, дата создания, попирайты, лицензия, почта автора, сайт автора, версия, описание.


В теге указываются все находящиеся в директории с модулем файлы и папки (кроме языковых файлов).

В теге перечисляются все языковые файлы используемые в модуле.

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

3. Написание кода обработки

На третьем этапе производится формирования основного кода модуля. Прописывается вся программная логика работы модуля.

Вся логика обработки прописывается в файле helper.php. В данном файле можно прописать любое количество функций используя API Joomla.

Пропишем функцию получения материалов из БД. Создадим новый класс - ModLastArticlesHelper, а функцию - getList.

Для получения возможности создавать ссылки подключим файл - route.php


4. ОБЪЕДИНЕНИЕ ОБРАБОТКИ И ПРЕДСТАВЛЕНИЯ

Для работы модуля необходимо прописать небольшой код в файле mod_last_articles.php.

В файле производится подключение файла обработки (helper.php) и файла представления (default.php). Также здесь прописывается переменная $list, которая используется в файле представления.


5. Создание представления

Необходимые данные получены и теперь нужно вывести результат на сайте. Для этого необходимо использовать файл - tmpl/default.php.

С помощью функции foreach выведем полученные данные из БД. А благодаря функции - getArticleRoute создадим ссылку по нажатию на заголовок материала.


6. Добавление языковых переменных

Языковые переменные не обязательны, однако благодаря им пользователи Joomla смогут изменять текстовые данные модуля с помощью Переопределения констант.


7. Добавление настроек

Чтобы создать настройки для модуля в Joomla!, в файле mod_last_articles.xml необходимо оформить блок тегов .

В данном блоке прописываются все поля, которые будут отображаться в настройках модуля. Узнать все доступные поля в Joomla! можно на этой странице.


Теперь можно использовать данные настройки в файле обработки и файле представления.

Например можно вывести строгое количество материалов на странице - столько сколько было задано в настройках. Чтобы получить значение одной настройки нужно прописать $params->get('count').


8. Установка модуля

Для установки модуля потребуется запаковать данные файлы в архив zip с названием данного модуля. В архиве должны сразу находится необходимые файлы без лишнего вложения.


Теперь чтобы установить модуль достаточно воспользоваться Менеджером расширений.

Результат

После установки модуля и внеся небольшие стилей (разбиение на блоки, уменьшение размера картинок) результат получается следующим:


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

Обычно функции модулей довольно простые.
Это вывод чего либо на сайте: виджет группы, слайдер, соц.кнопки, карта Яндекса, форма заявки и т.д.
Т.е. здесь не нужны массовые вычисления.

Поэтому можно взять что-то готовое и немного изменить под задачи.

как сделать модуль для joomla 3

Мы тоже сделаем такое поле, но не для URL адреса группы, а для её ID.
Чтобы не заморачиваться с получением ID из ссылки, будем сразу указывать ID.

Мы будем подставлять в код виджета переменную из нашего поля, пусть она будет называться $group_id

На этом подготовка (и продумывание) главного функционала готово)

Конечно, если взять даже простую форму обратной связи, о которой я говорил выше, то там будет больше кода, и будет немного сложнее.
Но сейчас самое главное я хочу показать принцип создания модулей для Joomla.

Подготовка файлов для модуля Joomla

Для работы модуля нужно несколько системных файлов.

Но для начала давайте дадим название этому модулю. Пусть это будет vk_contactus

От этого названия и будем отталкиваться при создании файлов.

Создаём папку vk_contactus и в ней файлы:

mod_vk_contactus.php - основной файл модуля. Как видите у него есть приставка mod_
Такая приставка используется для модулей.
В этом файле можно подключить JS скрипты, CSS файлы и включить некоторые другие опции.

mod_vk_contactus.xml - это xml файл настроек модуля и параметров при его установке

ru-RU.mod_vk_contactus.ini - перевод языковых констант на русский язык.

КОНСТАНТА="русский перевод, каждый с новой строки, без запятых"

ru-RU.mod_vk_contactus.sys.ini - перевод системных языковых констант на русский (обычно этот файл пустой).

Можно создавать дополнительные языковые файлы, например en-GB.mod_vk_contactus.ini - для английского перевода.
Если будет несколько переводов, то удобнее положить их в папку language.

Далее создаём папку tmpl - она нужна для хранения шаблонов (макетов) модуля.

default.php - это собственно файл с шаблоном модуля. Он у нас будет один, больше нам и не надо.

Либо в конце можно скачать готовый модуль.

В каждом php файле нужно указать defined('_JEXEC') or die;
Это запрет на прямое обращение к файлу извне.

Файл настроек давайте разберём подробнее.

XML файл настроек

xml version - версия xml документа и кодировка.

extension - тип расширения, в данном случае - модуль.
Ещё тут указывается версия joomla, client - это site или admin (сайт или админка) и метод установки - upgrade позволяет устанавливать новую версию модуля поверх старой. Это удобно, если вы постоянно обновляете свой модуль.

файлы модуля joomla 3

name - название модуля

author - имя автора модуля

creationDate - дата создания

license - тип лицензии

authorEmail - емейл автора

authorUrl - сайт автора

version - версия расширения

description - краткое описание модуля, здесь можно указать языковую константу, и потом в языковых файлах перевести её на нужный язык.

В блоке files указываются файлы и папки модуля.
filename - имя файла (для главного файла модуля добавляется module="его название", смотри пример в файле)
folder - имя папки

В блоке languages указываются языковые файлы
Если языковые файлы лежат без папки, то folder="language" не указывается.

В блоке config записываются поля для настройки модуля.

fields - Блок с полями для ввода параметров

fieldset - вкладка с полями, где name - название вкладки

field - поле с параметрами.

Будет лучше, если вы сами посмотрите этот файл и разберёте его содержимое.
А сейчас немного о типах полей.

Типы полей для ввода настроек

По сути, это обычные поля типа input, select и т.д.
Просто в Joomla они называются немного по другому.

Полный список полей можно посмотреть в документации

Мы добавим одно поле, в котором будем указывать ID группы ВК.

И разберём что здесь.

  • name - уникальное имя поля
  • type - тип поля (текстовое, выпадающий список, выбор цвета и т.д.)
  • default - значение поля по-умолчанию (необязательное)
  • label - подпись поля, я указал языковую константу
  • description - всплывающая подсказка (необязательное)

В документации по ссылке выше указаны все типы полей, посмотрите.

Внедрение функционала в модуль

Модуль простой, поэтому внедрение тоже простое.

Главный файл модуля mod_vk_contactus.php

В главном файле модуля мы указываем:

это нужно для подключения css и js файлов в шапку сайта (head).

Это нужно не всегда, как и в нашем случае, но пусть будет на всякий пожарный.
И так же расскажу как подключаются файлы. Вдруг вы будете создавать модуль по-сложнее.

CSS файлы подключаются так:

Где modules/mod_vk_contactus/css/default.css - это путь до css файла.

JS файлы подключаются так:

где modules/mod_vk_contactus/js/script.js - путь до js файла.

Кроме подключения файлов, нужно ещё включить суффикс класса модуля, для него есть специальное поле в настройках каждого модуля.
Он нужен для кастомизации внешнего вида модуля. Суффикс включается этой строчкой:

И в самом конце подключаем шаблон (макет) модуля. Это файл default.php в папке tmpl
Делаем это вот такой строкой:

При разных условиях, могут быть разные макеты.

Файл макета default.php

Здесь мы объявляем переменную и вставляем код виджета.

Переменная, в неё пишем значение из поля ID группы

Код виджета, со вставкой переменной $group_id:


Тестирование

Здесь настроек почти нет, и функционал прост, поэтому на тестирование уйдёт всего пара минут)

Если же вы создаёте более сложный модуль, то обязательно тестируйте его на ПК и на мобильных, при разных условиях, и в разных браузерах.

На этом всё, спасибо за внимание.
Готовый модуль можно скачать тут >>

Можете разобрать код других наших модулей, ради благого дела я не против)

Панель управление делиться на несколько частей и состоит из следующих модулей:

Создание модуля для панели управления в Joomla 3

1. Admin Menu – верхнее меню, думаю всем понятно, зачем оно нужно. Но мало кто знает, что все ссылки и расположение пунктов можно менять. За вывод ссылок хоть и отвечает модуль Admin Menu, но вы ведь можете создать свой вместо него и написать там что угодно.

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

2. User Status – нижняя панель статистики. В ней так же находиться модуль Joomla Version, он показывает используемую версию движка справа. Мне кажется, эта самый бессмысленный элемент в панели, за исключением статистики посетителей. Было бы куда удобней видеть эту информацию, где не будь, повыше.

Admin Menu

3. Title – единственное предназначение этого элемента, сообщать место, где вы находитесь. Ну, ещё справа находиться логотип. Может показаться, что он не нужен, но благодаря Title, создать уникальный стиль панели управления становиться лёгкой задачей. Представьте, что на этом месте фирменный цвета вашей компании и собственный логотип. Скажите пустяк, но всё равно приято.

Title

4. Toolbar – это панель инструментов. Используется часто и те, кто привык к её обычному расположению, скорее всего не станут в ней что-то менять.

Toolbar

5. Quick Icons – панель быстрого доступа (на картинке слева). Не знаю как остальным, но для меня она бесполезна, всё равно пользуюсь верхним меню.

6. Область на картинке справа – в данный момент там установлены три модуля Popular Articles, Recently Added Articles и Site Information. Количество размещённых элементов в ней не ограничено, но, к сожалению joomla предлагает мало стандартных модулей для установки в этом месте. Да и те, что имеются в наличии, хорошими трудно назвать. Вот поэтому мы и рассмотрим создание модуля для этой области.

Popular Articles, Recently Added Articles

Менеджер модулей – панель управления

Обратите внимание на позиции некоторых модулей. Наша область называется cpanel, именно cpanel отвечает за вывод на стартовой странице панели управления. Для того чтобы настроить какой-то конкретный модуль, необходимо нажать по его названию.

Создание модуля для панели

Теперь поговорим о том, как же создаются они. Сделать модуль оказалось просто. Достаточно создать два файла в специально отведённом для этого месте, после чего найти его через амин панель, установить и настроить. Наш модуль будет показывать текстовые ссылки на сторонние ресурсы, которые мы сами же будем добавлять.

И так, создаём папку mod_mymodule, внутри которой должны располагаться два файла - mod_mymodule.xml, mod_mymodule.php. Эти файлы создаём при помощи знакомой нам программы NotePadd++.

Создание модуля для панели

Открываем mod_mymodule.xml и вставляем это:

Это файл настроек модуля, он мало чем отличается от templateDetails.xml расположенного в каждом шаблоне. Благодаря написанному коду, joomla определяет, что это системный модуль для панели управления. Здесь указаны: название, версия, описание, файлы, находящиеся в папке и т.д. Всё что между тегами это настройки. Правила создания настроек точно такие же, как и для файла templateDetails.xml.

В файл mod_mymodule.php вставляем следующий код:

Он отвечает за показ самого модуля и то, что в нём находится. В данном случае, идёт проверка параметров из mod_mymodule.xml, если поля заполнены, выводится текст из них. Структура бывает сложная – дополнительные папки, скрипты, стили оформления и т.д. Но для работы простого модуля достаточно всего два этих файла.

После того как мы подготовили папку, открываем программу FileZilla и бросаем её в директорию …/administrator/modules/.

открываем программу FileZilla

Менеджер расширения - Поиск

Кнопка Установить

Расширения – Менеджер модулей

В открывшейся странице заполняем заголовок, устанавливаем позицию cpanel, пишем ссылки и в конце сохраняемся (показывать заголовок или нет, по желанию).

Устанавливаем позицию cpanel

Если вы сейчас перейдёте на стартовую страницу административной панели, то увидите вверху созданный нами элемент. Вот как он выглядит:

Созданный элемент (модуль)

Заключение

Читайте также: