WebTolkRu
100 subscribers
622 photos
73 videos
2 files
648 links
Joomla-разработчик. Контрибьютер ядра Joomla. https://web-tolk.ru. Разработка Joomla на заказ. Также пишу в @JoomlaFeed.
@sergeytolkachyov Хабр: https://habr.com/ru/users/sergeytolkachyov/posts/
Download Telegram
Перевод моей статьи опубликован в официальном журнале международного Joomla-сообщества - Joomla Community Magazine

https://magazine.joomla.org/all-issues/january-2025/connecting-third-party-php-libraries-in-joomla
👍3
E-mail шаблоны Joomla 5: добавление и просмотр своих переменных
В 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. Это ассоциативный массив.

// Получаем текущий мейлер 
$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. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.

P.S. Выложил текст на сайт + немного дополнил скриншотами.

@webtolkru

#joomla #разработка #php #development #webdev
👍4
Forwarded from Joomla Feed (Sergey Tolkachyov)
Плагин «Метатеги Open Graph на сайте» для Joomla 5

Плагин активирует создание метатегов Open Graph на сайте под управлением Joomla. Поддерживается работа с компонентами "Материалы" и Virtuemart. В плагине организована корректная работа с социальной сетью VK.COM, а также с Telegram и WhatsUp.

Расширение платное. Разработчик - участник нашего сообщества Владимир Егоров (@sitogon).

Страница расширения
Документация

#virtuemart #seo #opengraph
👍2
На память. Будем считать за отзыв.
❤2
Media is too big
VIEW IN TELEGRAM
Рабочие моменты. Больше мониторов богу мониторов ))
🔥3❤2😁1
Forwarded from Joomla Feed (Sergey Tolkachyov)
Как обновить плагин Joomla 3 до архитектуры Joomla 4 / Joomla 5. Челлендж: сделай это в блокноте!

На видео показывается как обновить старый плагин, созданный ещё для Joomla 2.5 или Joomla 3 до Joomla 4 / Joomla 5. Своеобразным челленджем стала попытка сделать это, имея на руках только блокнот (Notepad++). В время записи видео несколько раз процесс шёл не по плану, но тем интереснее было решить задачу, показав процесс поиска решения. Особенно не имея под рукой IDE (профессиональная среда разработки).

Автор к записи видео специально не готовился, поэтому заранее просит прощения за некоторую сумбурность и непоследовательность действий на экране.

Видео на YouTube
Видео на VK-видео

@joomlafeed

#php #joomla #разработка
👍3😁1
Рад помочь) Joomla forever! 👩‍💻

https://t.me/joomlaru/621581
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
👩‍💻 Совет по Joomla: переопределение макетов плагинов

Если плагины используют макеты вывода (в папке с плагином есть папка tmpl и в ней что-то есть, например default.php), то его можно переопределить в папке html шаблона.
Для компонентов мы создаём папку с именем компонента: com_content, com_contact и т.д.
Для модулей Joomla именуем папки так же, как модули - mod_custom, mod_articles и т.д.
Для плагинов же называем папку префикс plg + группа + имя_плагина. Например, plg_content_wt_content_spoiler.

Это больше напоминание самому себе. Забыл как папки для плагинов именовать ))

@webtolkru

#joomla #php #webdev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Forwarded from Joomla Feed (Sergey Tolkachyov)
Pizza, Bugs & Fun - 22 февраля 2025 года

Приближается выпуск 👩‍💻 Joomla 5.3, однако многие исправления и улучшения ещё должны быть протестированы и проверены, а значит пока что не могут быть внедрены в ядро Joomla. В большинстве случаев тестирование занимает всего несколько минут вашего времени, но Joomla! станет от этого немного лучше. Вас что-то бесит или вам чего-то не хватает в Joomla? Вы можете это исправить!

Уже несколько лет по всему миру проводятся так называемые мероприятия "Pizza, Bugs & Fun" (PBF), где каждый может научиться проводить такие тесты. Все желающие собираются в общий онлайн чат, обсуждают вопросы Joomla. Каждый помогает тем, что он умеет:
- кто-то пишет недостающую документацию,
- кто-то пишет код,
- кто-то тестирует как исправлены ошибки или новый функционал
Не обязательно быть мега-хакером, чтобы внести свой вклад в ядро Joomla.

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

👩‍💻 Сайт события
👩‍💻 Как присоединиться
👩‍💻 Организовать площадку
👩‍💻 Как я могу подготовиться к участию? (PDF)
👩‍💻 Как стать тестером Joomla?
👩‍💻 Как сделать Joomla лучше своими руками? (видео)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
10-й год работы с сайтом пошёл ))
🔥5😁1
Forwarded from Joomla Feed (Sergey Tolkachyov)
Вышел JoomShoppping 5.5.4
Один из популярных компонентов интернет-магазина на Joomla.

👩‍💻 v.5.5.4. Что нового?
- добавлен фильтр по способам оплаты / доставки в списке заказов
- добавлена поддержка сортировки по возрастанию/убыванию
- стал использоваться WebAssetManager для подключения css / js
- исправление ошибки сохранения transaction id
- оптимизация загрузки скидок для аддонов
- исправление ошибок при заполнении характеристик при редактировании товара
- исправление ошибок в способах доставки
- добавлены новые триггеры для плагинов

Страница расширения

#JoomShopping
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Продолжение эпопеи с переопределением модели и паттерном "декоратор" в Joomla.
Чувствую себя шахтёром...

Краткое содержание предыдущих серий:
- если боишься, что этот же участок кода будет переопределять другой код - юзай паттерн декоратор
- чтоб его использовать в Joomla 4+ - юзай $container->extend()
- переопредели в нём MVCFactory и переопредели весь публичный контракт: createModel, createView, createController, createTable, так как ты должен вернуть новый класс фабрики
- в createModel() подсунь свою модель, вместо модели ядра
- пойми, что так не работает, так как точка входа в фабрику - createController, затем контроллер создаёт вью, а вью подтягивает модели.
- в createController в качестве MVCFactory для создания модели устанавливается $this и поэтому если использовать паттерн декоратор - проксировать все методы обёрнутого класса, кроме нужного - не работает. При создании контроллера создаётся новая фабрика без твоих переопределений
- значит мы должны переопределить и createController...

Эксперименты показали, что для переопределения createController нужно наподключать все нужные для него трейты (ок), а потом если проксировать createView (мы же должны всё-таки паттерн хоть чуть-чуть использовать), то всё падает, так как в обёрнутом экземпляре класса нет всего того, что мы уже проделали в переопределенном createController...

Итого:
- код плагина разрастается.
- ни один из методов нормально декорировать не получается - только переопределение всех (или почти всех) методов фабрики
- смысл использования паттерна улетучивается на глазах
- идея переопределять именно MVCFactory, наверное, не самая лучшая...

Задача простая - чуть-чуть изменить SQL-запрос в getListQuery стандартных моделей. Сделал это просто заменив метод getClassName. Отдаю там namespace своей модели. Но такая простая замена класса может привести к проблемам, если этот же фрагмент кода попытается заменить другой плагин. Попытка использования паттерна декоратор не приводит к успехам. Ещё немного поищем, но скорее всего будем опираться на ответственность вебмастеров, которые знают ЧТО у них стоит на сайте и мешает оно друг другу или нет...
👍3
👩‍💻 Совет по Joomla: метод debug() для отладки лейаутов

В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке tmpl модуля. А в случае с плагинами - в tmpl плагина.

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

Лейауты чаще всего рендерятся с помощью классов LayoutHelper или напрямую FileLayout. Писал о них ранее тут и тут.

А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод debug() (и у LayoutHelper и у FileLayout).

/**
* Method to render a layout with debug info
*
* @param string $layoutFile Dot separated path to the layout file, relative to base path
* @param mixed $displayData Object which properties are used inside the layout file to build displayed output
* @param string $basePath Base path to use when loading layout files
* @param mixed $options Optional custom options to load. Registry or array format
*
* @return string
*
* @since 3.5
*/
public static function debug($layoutFile, $displayData = null, $basePath = '', $options = null)
{
//
}


То есть мы в можем проверить следующим образом:

/**
* Получаем параметры баннера
*/
$wt_custom_menu_item_banner = $menu->getParams()->get('wt_custom_menu_item_banner');

echo \Joomla\CMS\Layout\LayoutHelper::debug(
($wt_custom_menu_item_banner?->pluginlayout ?? 'default'),
['wt_custom_menu_item_banner' => $wt_custom_menu_item_banner],
JPATH_SITE.'/plugins/system/wt_custom_menu_item_banner/tmpl'
);


Для тех, кто с php не очень знаком, конструкция со знаком вопроса $wt_custom_menu_item_banner?->pluginlayout говорит о том, что свойства pluginlayout может и не существовать. Оператор Nullsafe (знак вопроса) позволяет не делать проверку.
if ($wt_custom_menu_item_banner?->pluginlayout) {
$layout = $wt_custom_menu_item_banner->pluginlayout;
}

Насколько помню, так можно поступать с объектами начиная с PHP 8.
@webtolkru

#php #development #webdev #joomla
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Forwarded from Joomla Feed (Sergey Tolkachyov)
WT Multicategories плагин мультикатегорий Joomla

Joomla плагин позволяет добавлять в категории статьи или контакты из других категорий (функционал мультикатегорий). id дополнительной категории берутся из пользовательского поля материалов или контактов.

Этот плагин добавляет возможность указать для материалов или контактов Joomla больше, чем одну категорию. Для этого нужно создать пользовательское поле, в котором будут указан id дополнительной категории. В настройках плагина нужно указать какое именно поле будет использоваться в качестве источника данных. Материалы и контакты из дополнительных категорий будут добавлены в общий список и будут отображаться среди материалов / контактов основной категории.

По смыслу это напоминает функционал тегов. Но данные для тегов хранятся в отдельной таблице базы данных и для них (в случае необходимости) нужно делать дополнительные переопределения макета в шаблоне. С помощью плагина мультикатегорий можно избежать дополнительной работы.

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

Joomla 4.2+. PHP 8+.

Страница расширения
GitHub расширения
Плагин WT Category

@joomlafeed

#php #joomla #расширения #плагин
👍4
JIntervention Image v.3.11.0
PHP-библиотека обработки изображений Intervention Image для Joomla 3 и Joomla 4
Список изменений
- Обновление библиотеки. Библиотека обновлена до версии 3.11.0. Обновление мажорной версии связано с изменениями API библиотеки. Проверьте работоспособность своего кода.
Подробнее
👍3
Forwarded from Joomla Feed (Sergey Tolkachyov)
Обновление Radical Multifield, Quantum Manager, JIntervention Image

👩‍💻 Quantum Manager - альтернатива штатному файловому менеджеру Joomla. Представляет удобный интерфейс работы с файлами, изображениями.

👩‍💻 Radical Multifield - плагин пользовательского поля для Joomla, с помощью которого можно создать слайдер, слайдшоу, таблицы, аудиоплееры и многое другое без сложных компонентов. Если установлен Quantum Manager, то плагин поля позволяет загружать изображения drag-n-drop и менять их размер, создавая миниатюры, в том числе добавляя водяные знаки.

👩‍💻 Оба этих расширения используют PHP библиотеку Intervention Image, обёрнутую в расширение Joomla и поэтому получившую префикс "J". Библиотека предоставляет разработчикам удобный инструментарий для обработки изображений. Поскольку впервые за долгое время была обновлена библиотека с версии 2.7.2 до версии 3.11, потребовалось внести изменения и в код мультиполя и файлового менеджера.
⚠️ Разработчикам, использующим эту библиотеку в своих расширениях следует проверить работоспособность своего кода, так как обновление мажорной версии расширения (1-го числа в версии) означает смену API и старый код может не работать.

Joomla 4.2.7+, PHP 8+.

- Quantum Manager (GitHub)
- Radical Multifield (GitHub)
- JIntervention Image (GitHub)

#joomla #расширения #dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
WT On fly image handler v.2.0.0
Обработка изображений товара JoomShopping при редактировании: одинаковые пропорции, конвертация в один формат, удаление прозрачности, именование файлов. Используется библиотека Intervention Image. Работает с Joomla 3 (JoomShopping 4) и Joomla 4 (JoomShopping 5)
Список изменений
- Поддержка Joomla 5. Плагин переписан на новую архитектуру расширений Joomla 4 / Joomla 5. Это означает, что он будет работать и в Joomla 6.
- Удалена поддержка Joomla 3. Окончательно удалена поддержка Joomla 3.
- Водяные знаки. Добавлена возможность наложения водяных знаков на изображения.
- JIntrevention Image 3.10+. Требуется библиотека JIntervention Image не ниже 3.10. PHP 8+....
Подробнее
👍2
SM WT CDEK аддон доставки для JoomShopping. v.1.3.0.

Способ доставки для интернет-магазина JoomShopping. Работает с API CDEK v.2. Считает стоимость доставки, позволяет выбрать пункт выдачи заказа CDEK на карте, отображает полную информацию о ПВЗ в заказе. Для работы аддона необходимо установить и настроить библиотеку WT CDEK. Joomla 4.2.7+, JoomShopping 5+.

👩‍💻 v.1.3.0. Что нового?
Дополнительные услуги CDEK. Страхование. Добавлены дополнительные услуги CDEK для цены расчета стоимости доставки. В том числе страховка (объявленная стоимость). Объявленная стоимость может быть равна стоимости заказа, умножена на коэффициент или фиксированная.
Габариты отправления. Добавлены габариты по умолчанию для цены расчета стоимости доставки.
Коэффициенты поправки веса и наценка на доставку в параметры цены способа доставки. Добавлены коэффициенты поправки веса и наценка на доставку в параметры цены способа доставки. Коэффициенты способа доставки применяются ПЕРЕД общими наценками и коэффициентами.
Адрес доставки другой. Исправлена неточность использования параметра "адрес доставки другой".
Режим отладки. Добавлены новые данные в режим отладки.
Улучшение интерфейса. Интерфейс настройки цены способа доставки стал удобнее.
Рефакторинг. Аддон расчета стоимости доставки теперь не использует методы, помеченные в JoomShopping как устаревшие.

Страница расширения

@webtolkru

#JoomShopping #joomla #cdek #доставка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Joomla Feed (Sergey Tolkachyov)
Joomla Web Services Collection For Postman

Разработчикам мобильных и WEB-приложений (и не только) весьма и весьма пригодится готовая коллекция для Postman. В коллекцию добавлены endpoint для REST API Joomla, с параметрами и примерами запросов.

Коллекция составлена трудами французского Joomla-разработчика Alexandre J-S William ELISÉ.

Смотреть коллекцию

@jooomlafeed

#joomla #restapi #webdev #разработка
🔥2👍1
Отладка целей Яндекс.Метрики на сайте

Давно этим не занимался, а тут попросили. Яндекс сделал панельку, которой именно для отладки метрики я не пользовался. В url страницы нужно добавить GET-параметр _ym_debug=2, чтобы получилось вот так: https://example.com/?_ym_debug=2
Совершаем целевое действие и в панельке метрики внизу проверяем что и как работает.

Удобно.
👍3