Подготовка расширений к Joomla 6: CMSObject -> stdClass
В Joomla 6 метод
Устаревший способ
Как будет в Joomla 6
Соответствующий Pull Request уже принят в ветку Joomla 6.
PR на GitHub
#php #joomla #разработка #development #webdev
В Joomla 6 метод
getItem()
в Adminmodel
будет возвращать \stdClass
вместо CMSObject
. Это означает, что все устаревшие функции этого класса будут недоступны. Разработчики в Joomla 6 должны напрямую работать со свойствами объекта item и не использовать устаревшие методы set()
и get()
.Устаревший способ
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->get('title');
Как будет в Joomla 6
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->title;
Соответствующий Pull Request уже принят в ветку Joomla 6.
PR на GitHub
#php #joomla #разработка #development #webdev
👍9
Forwarded from WebTolkRu (Sergey Tolkachyov)
E-mail шаблоны Joomla 5: добавление и просмотр своих переменных
В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов:
onMailBeforeRendering - триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида
Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера -
```php
// Получаем текущий мейлер
$mailTemplate = $event->
$data = [
'
];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
```
onMailBeforeTagsRendering - триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.
@webtolkru
#joomla #разработка #php #development #webdev
В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов:
onMailBeforeTagsRendering
и onMailBeforeRendering
. onMailBeforeRendering - триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида
[ variable_name => variable_value ]
. Из админки свои переменные нужно добавлять уже с фигурными скобками: {variable_name}
заменится на variable_value
. Аргументом $event
плагина является экземпляр класса BeforeRenderingMailTemplateEvent, в котором есть кроме прочих 2 метода: getTemplate()
(получение объекта мейлера, куда можно добавлять свои данные) и getTemplateId()
(получение id шаблона письма вида com_users.registration.admin.new_notification
), по которому мы определяем нужный ли это для нас email-шаблон или нет. Аналогично контексту в контент-плагинах. Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера -
$layoutTemplateData
. Это ассоциативный массив. ```php
// Получаем текущий мейлер
$mailTemplate = $event->
getTemplate()
;$data = [
'
variable_name
' => 'variable_value'];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
```
onMailBeforeTagsRendering - триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.
@webtolkru
#joomla #разработка #php #development #webdev
👍11
Совет по Joomla: метод debug() для отладки лейаутов
В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке
Их можно переопределять в шаблонах, в чём и заключается одна из главных фишек Joomla. Лейауты чаще всего рендерятся с помощью классов
А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод
Подробнее в посте на Хабре
#разработка #php #development #webdev
В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке
tmpl
модуля. А в случае с плагинами - в tmpl
плагина.Их можно переопределять в шаблонах, в чём и заключается одна из главных фишек Joomla. Лейауты чаще всего рендерятся с помощью классов
LayoutHelper
или напрямую FileLayout
. А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод
debug()
(и у LayoutHelper и у FileLayout).Подробнее в посте на Хабре
#разработка #php #development #webdev
👍12
Joomla Web Services Collection For Postman
Разработчикам мобильных и WEB-приложений (и не только) весьма и весьма пригодится готовая коллекция для Postman. В коллекцию добавлены endpoint для REST API Joomla, с параметрами и примерами запросов.
Коллекция составлена трудами французского Joomla-разработчика Alexandre J-S William ELISÉ.
Смотреть коллекцию
@jooomlafeed
#joomla #restapi #webdev #разработка
Разработчикам мобильных и WEB-приложений (и не только) весьма и весьма пригодится готовая коллекция для Postman. В коллекцию добавлены endpoint для REST API Joomla, с параметрами и примерами запросов.
Коллекция составлена трудами французского Joomla-разработчика Alexandre J-S William ELISÉ.
Смотреть коллекцию
@jooomlafeed
#joomla #restapi #webdev #разработка
👍5🔥1
Событие Pizza, Bugs & Fun приближается - 22 февраля 2025 года
Уже несколько лет в мире Joomla проводятся мероприятия "Pizza, Bugs & Fun" (#PBF), где каждый может посвятить несколько часов своего мозгового времени тому, чтобы наша любимая CMS стала ближе к идеалу.
Видео из этого поста рассказывает об организационных вопросах, которые пригодятся для участия в PBF:
- как создать аккаунт в Mattermost (чат международного Joomla-сообщества)
- как создать аккаунт в Joomla! Documentation
- как написать статью в Joomla! Documentation
- как создать аккаунт на GitHub (у разработчиков обычно уже он есть)
- как настроить патч тестер
- как протестировать патч
- как получить вознаграждение
В рамках события PBF все желающие могут собираться в общий онлайн чат, обсудить вопросы Joomla и приложить к их разрешению свою руку. Самый классный вариант, когда эта встреча происходит оффлайн: тогда организовывается пицца, напитки по вкусу и несколько часов совместного творчества.
Каждый помогает тем, что он умеет:
- кто-то пишет недостающую документацию,
- кто-то пишет код,
- кто-то тестирует как исправлены ошибки или сделан новый функционал.
На сайте события есть карта, можно "захостить" свою локацию. Практически все движки в мире развиваются за счёт спонсирующих их компаний. Joomla одна из немногих, где развитие идёт только усилиями международного сообщества энтузиастов.
На момент написания данного поста в репозитории Joomla 752 открытых Issue (как правило это баги) и 223 Pull request (PR, исправление багов и новый функционал). Все PR обязательно тестируются минимум двумя участниками сообщества, дабы в конечный код движка не проскочила ошибка.
Если каждый из участников только нашего сообщества сделает даже одно тестирование, то, боюсь, PR и Issue на всех не хватит 😀 И ничего не останется нашим коллегам из международных Joomla-чатов.
Смотреть видео
Сайт
@joomlafeed
#joomla #php #community #webdev
Уже несколько лет в мире Joomla проводятся мероприятия "Pizza, Bugs & Fun" (#PBF), где каждый может посвятить несколько часов своего мозгового времени тому, чтобы наша любимая CMS стала ближе к идеалу.
Видео из этого поста рассказывает об организационных вопросах, которые пригодятся для участия в PBF:
- как создать аккаунт в Mattermost (чат международного Joomla-сообщества)
- как создать аккаунт в Joomla! Documentation
- как написать статью в Joomla! Documentation
- как создать аккаунт на GitHub (у разработчиков обычно уже он есть)
- как настроить патч тестер
- как протестировать патч
- как получить вознаграждение
В рамках события PBF все желающие могут собираться в общий онлайн чат, обсудить вопросы Joomla и приложить к их разрешению свою руку. Самый классный вариант, когда эта встреча происходит оффлайн: тогда организовывается пицца, напитки по вкусу и несколько часов совместного творчества.
Каждый помогает тем, что он умеет:
- кто-то пишет недостающую документацию,
- кто-то пишет код,
- кто-то тестирует как исправлены ошибки или сделан новый функционал.
На сайте события есть карта, можно "захостить" свою локацию. Практически все движки в мире развиваются за счёт спонсирующих их компаний. Joomla одна из немногих, где развитие идёт только усилиями международного сообщества энтузиастов.
На момент написания данного поста в репозитории Joomla 752 открытых Issue (как правило это баги) и 223 Pull request (PR, исправление багов и новый функционал). Все PR обязательно тестируются минимум двумя участниками сообщества, дабы в конечный код движка не проскочила ошибка.
Если каждый из участников только нашего сообщества сделает даже одно тестирование, то, боюсь, PR и Issue на всех не хватит 😀 И ничего не останется нашим коллегам из международных Joomla-чатов.
Смотреть видео
Сайт
@joomlafeed
#joomla #php #community #webdev
👍4 1
Forwarded from WebTolkRu (Sergey Tolkachyov)
Joomla-разработчикам: обращение к методам модели в HtmlView напрямую
Когда-то, давным-давно в одной далёкой галактике кто-то решил, что что было бы неплохой идеей ввести косвенный доступ к методам модели (MVC) для получения данных, добавив метод
Но такой подход исключает любую возможность подсказки типов, аргументов и т. д. и делает все излишне сложным. Поэтому разработчики ядра Joomla объявили этот метод устаревшим с этим PR 44162.
Новый способ выглядит так:
Старый подход (то есть метод
1️⃣ осенью 2025г выйдет Joomla 6.
2️⃣ 2 года она будет основной веткой. Joomla 5 будет в режиме поддержки
3️⃣ через 2 года, в 2027 выйдет Joomla 7, в которой будет удалён этот метод.
4️⃣ но Joomla 6 будет ещё 2 года в режиме тех.поддержки и в ней (до 2029 года) этот метод останется.
Таким образом у разработчиков есть от 2,5 до 4,5 лет (на момент написания этого поста) на то, чтобы сделать этот рефакторинг.
👩💻👩💻 [5.3] Deprecate AbstractView::get() #44162
@webtolkru
#joomla #разработка #php #webdev
Когда-то, давным-давно в одной далёкой галактике кто-то решил, что что было бы неплохой идеей ввести косвенный доступ к методам модели (MVC) для получения данных, добавив метод
AbstractView::get()
. Этот метод извлекает модель и затем запускает get<Parameter>()
. Простыми словами, когда мы во View (файл HtmlView нашего компонента) видим конструкцию $this->item = $this->get('Item')
это означает обращение к методу getItem()
модели для текущего View.Но такой подход исключает любую возможность подсказки типов, аргументов и т. д. и делает все излишне сложным. Поэтому разработчики ядра Joomla объявили этот метод устаревшим с этим PR 44162.
Новый способ выглядит так:
// Файл HtmlView компонента
public function display($tpl = null)
{
$model = $this->getModel();
$this->items = $model->getItems();
parent::display($tpl);
}
Старый подход (то есть метод
get()
во View) будет удалён в Joomla 7. Памятуя о релизном цикле Joomla, это означает, что:1️⃣ осенью 2025г выйдет Joomla 6.
2️⃣ 2 года она будет основной веткой. Joomla 5 будет в режиме поддержки
3️⃣ через 2 года, в 2027 выйдет Joomla 7, в которой будет удалён этот метод.
4️⃣ но Joomla 6 будет ещё 2 года в режиме тех.поддержки и в ней (до 2029 года) этот метод останется.
Таким образом у разработчиков есть от 2,5 до 4,5 лет (на момент написания этого поста) на то, чтобы сделать этот рефакторинг.
👩💻👩💻 [5.3] Deprecate AbstractView::get() #44162
@webtolkru
#joomla #разработка #php #webdev
👍11 3
Forwarded from WebTolkRu (Sergey Tolkachyov)
Собственные макеты вывода для пользовательских полей Joomla
Мы привыкли использовать механизм переопределения макетов Joomla: скопируй нужный тебе файл макета в папку
Joomla ищет макеты рендера всех пользовательских полей в следующем порядке:
- Есть ли файл
- Нет? Есть ли файл
- Нет? Есть ли файл
- Нет? Используем файл
Это механизм поиска переопределений файлов макетов.
Вчера столкнулся с тем, что если поле вставлено в текст материала с помощью шорт-кода (кнопкой редактора) вида
Файл
Благо, переводил уже раньше статью Как происходит рендер пользовательских полей в Joomla?. Потом, порывшись по своему же переводу увидел, что эта особенность работы Joomla в статье уже в ней описана 😂. А также напомнил себе о возможности указывать макет поля прямо в шорт-коде, через запятую:
@webtolkru
#joomla #php #разработка #webdev
Мы привыкли использовать механизм переопределения макетов Joomla: скопируй нужный тебе файл макета в папку
html
шаблона и твори там что хочешь. Это в полной мере относится и к пользовательским полям Joomla.Joomla ищет макеты рендера всех пользовательских полей в следующем порядке:
- Есть ли файл
templates/[template name]/html/layouts/[component name]/fields/render.php
, переопределяющий макет вывода полей для конкретного компонента? Да - используем его.- Нет? Есть ли файл
components/[component name]/layouts/fields/render.php
в папке компонента? Да - используем его.- Нет? Есть ли файл
templates/[template name]/html/layouts/com_fields/fields/render.php
, переопределяющий вывод полей для com_fields
? Да - используем его.- Нет? Используем файл
components/com_fields/layouts/fields/render.php
Это механизм поиска переопределений файлов макетов.
Вчера столкнулся с тем, что если поле вставлено в текст материала с помощью шорт-кода (кнопкой редактора) вида
{field 25}
, то переопределения не сработали. Поэтому стал вспоминать как сделать свой макет для поля Joomla. Файл
components/com_fields/layouts/field/render.php
копируем в templates/YOUR_TEMPLATE/html/layouts/com_fields/field/etapy-raboty-nad-proektom.php
. Обратите внимание, что мы файл переименовали, чтобы в настройках поля видеть его в выпадающем списке. После этого всё заработало как надо. Благо, переводил уже раньше статью Как происходит рендер пользовательских полей в Joomla?. Потом, порывшись по своему же переводу увидел, что эта особенность работы Joomla в статье уже в ней описана 😂. А также напомнил себе о возможности указывать макет поля прямо в шорт-коде, через запятую:
{field 25,etapy-raboty-nad-proektom}
. Правда, если честно, никогда этой возможностью не пользовался. @webtolkru
#joomla #php #разработка #webdev
👍7 1
Этот метод нужен для работы с кнопками тулбара в Joomla. Как правильно получить объект текущего тулбара в Joomla 5.x расскажет пост на Хабре участника нашего сообщества Виталия Некрасова (@vitalik_a)
Читать пост
Подпишись на @joomlafeed
#joomla #php #webdev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Пост @VitaliyNekrasov — Joomla — 23.03 16:21
Заменяем устаревший метод Joomla\CMS\Toolbar\Toolbar::getInstance() в Joomla 5.2.5. Joomla предлагает использовать...
👍7 2
Использование своего класса MVC фабрики в компоненте Joomla 5
У участника нашего сообщества Виталия Некрасова (@vitalik_a) назрела необходимость переопределить метод
Подпишись на @joomlafeed
#joomla #php #webdev #разработка
У участника нашего сообщества Виталия Некрасова (@vitalik_a) назрела необходимость переопределить метод
createModel()
в своём компоненте. Он захотел сделать это правильно, заменив класс MVC фабрики своим и поделился своим опытом в посте на Хабре.Подпишись на @joomlafeed
#joomla #php #webdev #разработка
Хабр
Пост @VitaliyNekrasov — Joomla — 30.03 15:05
Использование своего класса MVC фабрики в компоненте Joomla 5 Давно назрела необходимость переопределить ->createModel() в своём компоненте. И я хотел сделать это правильно, заменив класс MVC...
👍6 3
Обзор MVCFactory в Joomla 5
Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с собственными компонентами.
Перевод выполнил участник нашего сообщества Виталий Некрасов (@vitalik_a).
Читать статью на Хабре
Оригинал: Joomla! Programmers Documentation for Joomla 5.2
Подпишись на @joomlafeed
#joomla #php #webdev #разработка
Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с собственными компонентами.
Перевод выполнил участник нашего сообщества Виталий Некрасов (@vitalik_a).
Читать статью на Хабре
Оригинал: Joomla! Programmers Documentation for Joomla 5.2
Подпишись на @joomlafeed
#joomla #php #webdev #разработка
Хабр
Обзор MVCFactory в Joomla 5
Класс Joomla\CMS\MVC\Factory\MVCFactory используется в Joomla для создания экземпляров классов компонентов Controller , View , Model и Table . Каждый компонент имеет свой собственный экземпляр класса...
👍4 3🔥1
Joomla-дайджест. 1-й квартал 2025 года.
После долгого перерыва читайте все главные новости из мира Joomla с момента выхода Joomla 5.2.0 (15 октября 2024 года) в одной статье. Но для удобства в названии ограничимся первым кварталом 2025 года. Традиционно наш дайджест обозревает новости, расширения, шаблоны и статьи из мира Joomla.
Читать дайджест на Хабре
Подпишись на @joomlafeed
#joomla #расширения #разработка #webdev
После долгого перерыва читайте все главные новости из мира Joomla с момента выхода Joomla 5.2.0 (15 октября 2024 года) в одной статье. Но для удобства в названии ограничимся первым кварталом 2025 года. Традиционно наш дайджест обозревает новости, расширения, шаблоны и статьи из мира Joomla.
Читать дайджест на Хабре
Подпишись на @joomlafeed
#joomla #расширения #разработка #webdev
Коллекция сниппетов кода в маркетплейсе VS Code позволит ускорить работу при разработке расширений Joomla или шаблонов.
Список сниппетов:
DI-контейнер
-
sp-toolbar
- Создать объект панели инструментов-
sp-config
- Создать объект конфигурации-
sp-language
- Создать языковой объект-
sp-app
- Создать объект приложения-
sp-input
- Создать объект Input-
sp-db
- Создать объект базы данных-
sp-object
- Создание любого объекта DI-контейнера-
sp-user-id
- Загрузить пользователя по объекту Id-
sp-user-username
- Загрузить пользователя по username-
sp-mailer
- Создать объект Mailer-
sp-user
- Получить текущий объект пользователяОперации с базами данных
-
sp-db-query
- Создание запроса к базе данных с помощью Fluent InterfaceОбработка форм
-
sp-form
- Создать пустую форму XML-
sp-listfield
- Создать поле списка-
sp-textareafield
- Создать текстовое поле -
sp-sqlfield
- Создать поле SQL-
sp-calendarfield
- Создать поле календаря-
sp-hiddenfield
- Создать скрытое поле формы-
sp-spacerfield
- Создать поле spacer-
sp-repeatablefield
- Создать повторяющееся поле формы-
sp-form-validate
- Код проверки формыРазработка плагинов
-
sp-plugin-base
- Создать базовый класс плагина-
sp-plugin-events
- Регистрация событий плагина-
sp-plugin-xml
- XML-файл конфигурации плагина-
sp-plugin-di-provider
- provider.php для плагина-
sp-plugin-event
- Код триггера события плагина-
sp-plugin-di-service
- Служба внедрения зависимостей плагиновРазработка компонентов
-
sp-component-controller
- Базовый контроллер компонента-
sp-component-model
- Базовая модель компонента с CRUD-
sp-component-helper
- хелпер компонентаРазработка шаблона
-
sp-template-index
- Файл index.php шаблона-
sp-template-chrome
- Обёртка модуля (chrome)-
sp-template-override
- База переопределения шаблона-
sp-template-error
- Страница ошибок шаблона-
sp-template-header
- хедер шаблона-
sp-template-menu
- Шаблон меню-
sp-template-single
- Шаблон (одностраничный?)-
sp-template-single-layout-section
- секция макета (одностраничного?) шаблона-
sp-template-single-template
Вспомогательные функции
-
sp-input
- Обработка данных с фильтрацией типов (Input)-
sp-language
- Загрузка языкового файла-
sp-error
- Обработка и регистрация ошибок-
sp-session
- работа с сессиейУстановить коллекцию сниппетов
Подпишись на @joomlafeed
#разработка #php #webdev #vscode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3 3🙏1
Joomla 4 Rest API: создаем свои JSON-эндпоинты с нуля
По умолчанию Joomla отправляет ответы в формате JSON API, если запрос содержит
👩💻 Цели материала:
- Получить JSON ответ от API Joomla;
- Создать необходимый плагин группы webservices и API-часть компонента;
- Использовать параметры модуля для моделирования данных, которые мы отправим в ответе API.
👩💻 Что не является целью?
Обучение созданию расширений. Данное руководство предполагает, что вы уже умеете создавать расширения для Joomla. Для работы API потребуются плагин и компонент, но компонент может быть минимальным — без модели (Model), с простой административной частью.
Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с реактивными frontend- фреймворками.
Перевод выполнил участник нашего сообщества Виталий Некрасов (@vitalik_a).
- Читать статью на Хабре
- Оригинал в документации
Подпишись на @joomlafeed
#webdev #разработка #joomla #api #restapi
По умолчанию Joomla отправляет ответы в формате JSON API, если запрос содержит
Accept: application/json
или специальный заголовок JSON API. Хотя ядро Joomla не поддерживает другие типы контента, система позволяет разработчикам добавлять дополнительные форматы для ответов.- Получить JSON ответ от API Joomla;
- Создать необходимый плагин группы webservices и API-часть компонента;
- Использовать параметры модуля для моделирования данных, которые мы отправим в ответе API.
Обучение созданию расширений. Данное руководство предполагает, что вы уже умеете создавать расширения для Joomla. Для работы API потребуются плагин и компонент, но компонент может быть минимальным — без модели (Model), с простой административной частью.
Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с реактивными frontend- фреймворками.
Перевод выполнил участник нашего сообщества Виталий Некрасов (@vitalik_a).
- Читать статью на Хабре
- Оригинал в документации
Подпишись на @joomlafeed
#webdev #разработка #joomla #api #restapi
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Joomla 4 Rest API: создаем свои JSON-эндпоинты с нуля
По умолчанию Joomla отправляет ответы в формате JSON API, если запрос содержит Accept: application/json или специальный заголовок JSON API. Хотя ядро Joomla не поддерживает другие типы контента,...
👍6 1
Forwarded from WebTolkRu (Sergey Tolkachyov)
Писал ранее о том, как внутри одного пользовательского поля рендерить другое пользовательское поле. Применил для этого возможность Joomla обращаться к методам плагинов напрямую. Процитирую строчку кода из предыдущего поста:
$joomlaFieldContentPlugn->onContentPrepare('com_content.article', $fakeItem, $app->getParams());
Joomla постепенно переходит от простого указания аргументов для триггеров плагинов к собственным классам событий. Это позволяет не запоминать порядок передачи аргументов класса и использовать человекопонятные методы
$event->getContext()
, $event->getItem()
и т.д. А то в одном месте в Joomla было $article
, в другом - $item
, в третьем ещё как-то... Порядку больше становится. Сегодня обновил сайт клиентов до Joomla 5.3. В ней обновили контент-плагин fields и мой финт ушами с вызовом метода плагина отвалился потому, что я передавал в нём 3 аргумента, вместо одного. И для события onContentPrepare это должен быть объект класса
ContentPrepareEvent
.Как меняется фрагмент кода из предыдущего поста:
// мы находимся в файле макета поля
use Joomla\CMS\Event\Content\ContentPrepareEvent;
use Joomla\CMS\Factory;
$app = Factory::getApplication();
$fakeItem = new \stdClass();
// Получаем id текущего материала из объекта Input
$fakeItem->id = $app->getInput()->getInt('id');
// {field 29} - это шорт код вставки поля с id 29 - "ассортимент проекта"
// к содержимому поля конкатенируем шорт-код для обработки
$fakeItem->text = $field->value . '{field 29}';
// Получаем объект плагина
$joomlaFieldContentPlugn = $app->bootPLugin('fields', 'content');
// вызываем метод обработки напрямую
// вместо 3-х аргументов теперь указываем один
// это объект класса ContentPrepareEvent
$joomlaFieldContentPlugn->onContentPrepare(new ContentPrepareEvent('onContentPrepare', [
'context' => 'com_content.article',
'subject' => $fakeItem,
'params' => $app->getParams(),
'page' => 0,
]));
// выводим оба поля
echo $fakeItem->text;
@webtolkru
#joomla #webdev #php #разработка #поля
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
WebTolkRu
👩💻 Совет по Joomla: рендер пользовательского поля внутри другого пользовательского поля
Иногда дизайнеры рисуют непростые макеты. Внешне в них выглядит всё просто и красиво. Но ты смотришь на них и думаешь: "А с помощью чего я буду реализовывать это?" Эта…
Иногда дизайнеры рисуют непростые макеты. Внешне в них выглядит всё просто и красиво. Но ты смотришь на них и думаешь: "А с помощью чего я буду реализовывать это?" Эта…
👍3
Как вызвать событие только для указанной (одной или более) группы плагинов в Joomla 5
Системные плагины в Joomla срабатывают всегда, но большое их количество может негативно сказаться на скорости работы Приложения. А во-вторых ошибка в системном плагине, добавляющем кнопку в тулбар может обрушить механизм регистрации / авторизации пользователя. Поэтому для лучшего быстродействия и надёжности работы системы плагины в Joomla разделены на группы. Каждая группа срабатывает только в определённом месте и в определённый момент времени.
Небольшой пост-шпаргалка для Joomla-разработчиков от участника нашего сообщества Виталия Некрасова (@vitalik_a) подскажет как в своём коде сделать то, что написано в заголовке поста😎
Читать пост на Хабре
#joomla #php #разработка #webdev
Системные плагины в Joomla срабатывают всегда, но большое их количество может негативно сказаться на скорости работы Приложения. А во-вторых ошибка в системном плагине, добавляющем кнопку в тулбар может обрушить механизм регистрации / авторизации пользователя. Поэтому для лучшего быстродействия и надёжности работы системы плагины в Joomla разделены на группы. Каждая группа срабатывает только в определённом месте и в определённый момент времени.
Небольшой пост-шпаргалка для Joomla-разработчиков от участника нашего сообщества Виталия Некрасова (@vitalik_a) подскажет как в своём коде сделать то, что написано в заголовке поста
Читать пост на Хабре
#joomla #php #разработка #webdev
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Пост @VitaliyNekrasov — Joomla — 07.04 15:44
Как вызвать событие только для указанной (одной или более) группы плагинов в Joomla 5 Обычно события в Joomla вызываются следующим образом: Шаг 1: Получаем объект диспечера В коде Joomla можно найти...
👍7 7
Forwarded from WebTolkRu (Sergey Tolkachyov)
Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей
Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути
libraries/src/Form/FormField.php
, а так же в libraries/src/Form/Fields
. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он?
В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.
<field type="note"
name="your_note_for_user"
label="Заголовок примечания"
title="Альтернативный способ для заголовка"
description="Текст примечания"
class="col-12 alert alert-info"
heading="h1"
close="true"
/>
heading
- указывать уровень заголовка. close
- позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php
описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField
. Это значит, что у нас в руках будет весь инструментарий стандартного поля Note
+ то, что мы сами добавим. В XML-манифест добавляем наше поле
<field type="systempluginstatus"
name="systempluginstatus"
addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
-
type
- имя файла и класса,-
addfieldprefix
- указываем namespace к нашему классу, может быть любой нам нужный-
name
- нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php
.А в классе поля будет написано следующее:
<?php
// namespace для атрибута addfieldprefix
namespace Joomla\Module\Wtquicklinks\Site\Fields;
// нельзя напрямую обращаться к этому файлу
defined('_JEXEC') or die;
// подключаем родительский класс для переопределения
use Joomla\CMS\Form\Field\NoteField;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
// имя класса и имя файла точь-в-точь
class SystempluginstatusField extends NoteField
{
protected $type = 'Systempluginstatus';
protected function getLabel()
{
// если плагин не включён
if(PluginHelper::isEnabled('system','wtquicklinks')) {
// меняем свойства родительского класса
$this->class = 'alert alert-danger w-100';
$this->element['label'] = '⚠️ А-а-а-а!';
$this->element['description'] = 'Плагин не включён!!';
// и просто рендерим его с нашими свойствами
return parent::getLabel();
}
// А иначе всё хорошо, скрываем поле из виду.
$this->parentclass = 'd-none';
return '';
}
}
Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.
@webtolkru
#joomla #php #webdev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8 3
Веб-ассет Fancybox.js для Joomla v.6.0.9.
В Joomla 4 и Joomla 5 появилась концепция Web Assets и WebAssetManager, с помощью которого можно управлять подключениями css, js файлов, подключением. Все css и js файлы включаются в общий реестр ассетов, затем выстраивается граф зависимостей и в итоге на генерируемую страницу подключается только то что нужно на данной странице.
Поскольку веб-ассеты можно добавлять с помощью плагинов (ссылка на статью ниже) - можно сказать, что появилось новое направление для плагинов - веб-ассеты. Вы можете устанавливать плагины, включающие веб-ассеты и использовать их как зависимости в самых разных местах Joomla: в шаблоне, в макетах модулей и плагинов.
Одним из таких плагинов веб-ассетов является WT Fancybox.js. Плагин добавляет в Joomla WebAssets Registry css и js популярного скрипта галереи изображений fancybox.js, который потом легко можно использовать в коде:
Плагин использует систему обновлений Joomla, поэтому с появлением новых версий вы сможете получать их на своих сайтах естественным для Joomla путём.
👩💻 Спасибо за работу по упаковке ассета в плагин участнику нашего сообщества Сергею Сергевнину (@gresserg).
- Скачать WT Fancybox.js для Joomla
- Статья на JPath.ru Как правильно подключать JavaScript и CSS в Joomla 4
- Статья на Хабре: Использование WebAssetsManager Joomla 4 (Joomla 5) и добавление собственных пресетов с помощью плагина
#joomla #расширения #webdev
В Joomla 4 и Joomla 5 появилась концепция Web Assets и WebAssetManager, с помощью которого можно управлять подключениями css, js файлов, подключением. Все css и js файлы включаются в общий реестр ассетов, затем выстраивается граф зависимостей и в итоге на генерируемую страницу подключается только то что нужно на данной странице.
Поскольку веб-ассеты можно добавлять с помощью плагинов (ссылка на статью ниже) - можно сказать, что появилось новое направление для плагинов - веб-ассеты. Вы можете устанавливать плагины, включающие веб-ассеты и использовать их как зависимости в самых разных местах Joomla: в шаблоне, в макетах модулей и плагинов.
Одним из таких плагинов веб-ассетов является WT Fancybox.js. Плагин добавляет в Joomla WebAssets Registry css и js популярного скрипта галереи изображений fancybox.js, который потом легко можно использовать в коде:
use Joomla\CMS\Factory;
$wa = Factory::getApplication()->getDocument()->getWebAssetManager();
$wa->usePreset('wtfancybox'); // Local file
$wa->usePreset('wtfancybox-remote'); // Use from CDN
Плагин использует систему обновлений Joomla, поэтому с появлением новых версий вы сможете получать их на своих сайтах естественным для Joomla путём.
- Скачать WT Fancybox.js для Joomla
- Статья на JPath.ru Как правильно подключать JavaScript и CSS в Joomla 4
- Статья на Хабре: Использование WebAssetsManager Joomla 4 (Joomla 5) и добавление собственных пресетов с помощью плагина
#joomla #расширения #webdev
Please open Telegram to view this post
VIEW IN TELEGRAM
WebTolk
WT Fancybox.js плагин для Joomla - WebTolk
Плагин регистрирует Fancybox пакет в Joomla Web Assets Manager. После регистрации вы можете использовать его в своих расширениях.
👍8 4