Обновить
54.15

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга

Joomla-разработчикам: обращение к методам модели в HtmlView напрямую

Когда-то, давным-давно в одной далёкой галактике кто-то решил, что было бы неплохой идеей ввести в Joomla косвенный доступ к методам модели (MVC) для получения данных, добавив метод AbstractView::get(). Этот метод извлекает модель и затем запускает get(). Простыми словами, когда мы во 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

Чат русскоязычного Joomla-сообщества

Теги:
Всего голосов 2: ↑1 и ↓1+1
Комментарии0

Совет по Joomla: показ уведомлений Joomla.renderMessages.

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

use Joomla\CMS\Factory;

$html = 'Message';
Factory::getApplication()->enqueueMessage($html, 'warning');

Чаще всего в качестве сообщения используются языковые константы, чтобы пользователи могли получать сообщения на своём языке:

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;

Factory::getApplication()->enqueueMessage(Text::_('SOME_LANG_CONSTANT'), 'info');

Рендер сообщений Joomla во фронтенде.

Здесь нам потребуется файл подключённые файлы ядра core.js и messages.js. Немного выдержки из кода:

/**
* Рендер сообщений, отправленных через  JSON
* Используется некоторыми javascript, в частности validate.js
*
* @param   {object}  messages JavaScript объект, содержащий сообщения для рендера.
* Пример:
*    const messages = {
*        "message": ["Это будет зелёное сообщение", "И это тоже"],
*        "error": ["Это будет красное сообщение", "И это тоже"],
*        "info": ["Это будет синее сообщение", "И это тоже"],
*        "notice": ["Какое-то информационное сообщение", "И это тоже"],
*        "warning": ["Оранжевое сообщение", "И это тоже"],
*        "my_custom_type": ["Такое же как инфо-сообщение", "И это тоже"]
*    };
* @param  {string} selector CSS-селектор контейнера для рендера сообщений
* @param  {bool}   keepOld  Удалить предыдущие сообщения? Да, если true
* @param  {int}    timeout  Таймаут исчезновения сообщения в миллисекундах
* @return  void  Метод ничего не возвращает
*/

Вот как это выглядит на практике:

Joomla.renderMessages({
    message: [Joomla.Text._('COM_SWJPROJECTS_USER_KEYS_KEY_SUCCESSFULLY_COPYED')]
});

Теперь мы видим, что в качестве сообщения мы и в Javascript можем использовать языковые константы. Для этого мы используем метод Joomla.Text._() (по аналогии с Text::_() в PHP). Но Javascript откуда-то должен получить значения этих языковых констант. И для этого в php коде нашей страницы мы должны позаботиться о нём и добавить нужные для js языковые константы с помощью метода Text::script().

use Joomla\CMS\Language\Text;

Text::script('SOME_LANG_CONSTANT_SUCCESS');
Text::script('SOME_LANG_CONSTANT_FAIL');

Таким образом я смогу получить в js доступ к значениям языковых констант SOME_LANG_CONSTANT_SUCCESS и SOME_LANG_CONSTANT_FAIL.

Источник

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Событие 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 по-русски: чат сообщества

Теги:
Рейтинг0
Комментарии0

Совет по Joomla: программный рендер модулей

Модули порой удобно использовать в местах, которые в Joomla не всегда предназначены для этого 😀. Например, в переопределениях макета. Из материала делаем посадочную страницу: часть инфы находится в самом материале, часть - в полях, а часть удобно вывести модулем. При этом модуль этот должен находиться между телом материала и данными из пользовательских полей.

Для реализации берём в руки ModuleHelper и приступаем.

<?php
use \Joomla\CMS\Helper\ModuleHelper;

$modules = ModuleHelper::getModules('landing-masonry');
if(!empty($modules))
{
    foreach ($modules as $module)
    {
        // рендерим всё, что нашли в позиции landing-masonry
        echo ModuleHelper::renderModule($module);
    }
}

А что если посложнее?

В этом случае всё просто. Но здесь в тему будет упомянуть ещё один способ работы с модулями. Контекст: магазин одежды. В карточке товара нужно вывести информацию о размерной сетке, типовые рекомендации по уходу и т.д. Это короткие тексты, которые повторяются из товара в товар и не нужно их копировать многажды. Эти тексты отображались простым аккордеоном Bootstrap.

Вид карточки товара JoomShopping. Все тексты, кроме описания товара - одинаковые во всех товарах. Описание товара уникальное для каждого товара.

Но! В этот же аккордеон нужно было добавить и описание товара JoomShopping. Поэтому я сделал с помощью своего модуля WT Quick links следующее.

  1. Создал модуль типа WT Quick Links, в котором в список элементов занёс все нужные тексты.

  2. Не стал назначать модуль какой-либо позиции. В шаблоне JoomShopping захардкодил id модуля. Хотя лучше было бы назначить модуль в некой уникальной позиции, которая встречалась бы только в нужном нам месте на сайте.

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

  4. Отрендерил модуль с помощью ModuleHelper в product_default.php шаблона JoomShopping.

<?php
use Joomla\CMS\Helper\ModuleHelper;
use Joomla\Registry\Registry;

// Модуль id 136 - Доставка, оплата и гарантии в карточку товара + ОПИСАНИЕ ТОВАРА JoomShopping
$module = ModuleHelper::getModuleById('136');

$module_params = new Registry($module->params);
// Формируем новые параметры модуля перед рендером. 
$new_module_params = [];
$i = 1;

// Помещаем описание товара в самое начало

if (!empty($this->product->description)){
    $new_module_params['fields']['fields0'] =  (object) [
        'item_header' => Text::_('JSHOP_DESCRIPTION'),
        'item_text'   => $this->product->description
    ];
}
// Переименовываем все остальные ключи массива элементов из модуля
foreach ($module_params->get('fields') as $key => $value)
{
    $new_module_params['fields']['fields' . $i] = $value;
    $i++;
}
$new_module_params = new Registry($new_module_params);
// Соединяем старые и новые параметры модуля.
$module_params->merge($new_module_params);

$module->params = $module_params->toString();

// Всё готово! Рендерим модуль.
echo ModuleHelper::renderModule($module);

Теги:
Всего голосов 3: ↑1 и ↓2+1
Комментарии0

Joomla Web Services Collection For Postman

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

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

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

Чат русскоязычного Joomla-сообщества

Теги:
Рейтинг0
Комментарии0

Совет по Joomla: метод debug() для отладки лейаутов

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

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

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

<?php
/**
* Method to render a layout with debug info
*
* @param   string  $layoutFile   Dot separated путь к файлу относитеьлно basePath
* @param   mixed   $displayData  Объект с данными для рендера
* @param   string  $basePath     Base path, где будет поиск файлов лейаутов
* @param   mixed   $options      Дополнительные опции для FileLayout
*
* @return  string
*
* @since   3.5
*/
public static function debug($layoutFile, $displayData = null, $basePath = '', $options = null)
{
 // Так проще показать параметры метода.
}

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

<?php
/**
 * Получаем параметры баннера
 */
$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'
    );

И увидим результат как на скриншоте в начале поста.

Чат русскоязычного Joomla-сообщества.

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии2

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. Отдать туда нужно массив с переменными, но без их значений.

Чат Joomla-сообщества в Telegram

Мой личный Telegram-канал

Теги:
Рейтинг0
Комментарии0

Лучший кейс по MoonShine: время голосовать! 🗳

Привет, друзья! 👋

Наш конкурс кейсов использования MoonShine (админ-панели для Laravel) вышел на финишную прямую. Пришло время выбрать лучшего из лучших! 🏆

Оформлены кейсы:

  1. Учёт транспорта

  2. Динамическое обновление в MoonShine

  3. Панель управления контрактами

  4. CRM для отелей

  5. Сервис для дропшиппинга

  6. Онлайн-обменник

Теперь слово за вами! 🚀 Голосуйте за самый интересный кейс. Победитель получит PHP-слоника 🐘. И звание "Герой MoonShine 2024"! 😜 Голосуем тут:

https://t.me/moonshine_ru/5/15535

📅 Голоса принимаются до 31 декабря в 12:00 (мск)!

Давайте вместе выберем самого креативного и талантливого автора-разработчика в нашем комьюнити!

Теги:
Всего голосов 4: ↑3 и ↓1+3
Комментарии0

🎉 Релиз MoonShine v3 админ панели для Laravel! 🎉

Друзья, у нас праздник!

10 декабря наконец-то зарелизили MoonShine v3 (open-source панели администратора для проектов на Laravel).

Кто не вкурсе, вот статьи:

Первый взгляд на MoonShine

MoonShine 2.0. Что нового?

Это было непросто. Пришлось отложить дату релиза, но зато успел всё сделать что запланировано. 🔥

Что было на стриме:

  • 🕰 Краткая история создания MoonShine — от первых шагов до сегодняшнего дня.

  • 🚀 Релиз на GitHub, деплой новой версии лендинга и документации.

  • 🛍 Демонстрация маркетплейса приложений для MoonShine

Обязательно посмотрите запись стрима! Вы не только узнаете больше о MoonShine, но и вдохновитесь на свои проекты.

🎥 Ссылка на стрим

Немного выдохну, и сделаю подробный разбор по возможностям MoonShine v3.

Сайт проекта - https://moonshine-laravel.com/

Чат в телеграм - https://t.me/moonshine_ru

#MoonShine #релиз #CutCode

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии0

Подготовка расширений к Joomla 6: CMSObject -> stdClass

В Joomla 6 метод getItem() в Adminmodel будет возвращать \stdClass вместо CMSObject. Это означает, что все устаревшие функции этого класса будут недоступны.

Разработчики в Joomla 6 должны напрямую работать со свойствами объекта item и не использовать устаревшие методы set() и get().

Устаревший способ

<?php
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->get('title');

Как будет в Joomla 6

<?php
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->title;

Соответствующий Pull Request уже принят в ветку Joomla 6.

PR на GitHub

Теги:
Рейтинг0
Комментарии0
https://github.com/dykyi-roman/enterprise-skeleton

Вводные

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

Особенность проекта в его модульной архитектуре, которая поддерживает популярные PHP-фреймворки (Symfony и Laravel), и в возможности быстро адаптировать его под нужды конкретной команды или компании.

Если вы заинтересовались, начните с установки: GitHub репозиторий

Установка

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

1) Клонируем проект:

git@github.com:dykyi-roman/enterprise-skeleton.git

2) Копируем базовую конфигурацию:

make copy-config

3) Выбираем нужные нам сервисы:

server=nginx            # Web Server: nginx, apache
database=postgres       # Database Service: postgres, mysql
;nosql=mongodb          # NoSQL Database Service: mongodb, cassandra
cache=redis             # Cache Service: redis, memcached
;search=elasticsearch   # Search: elasticsearch, solr
;message=kafka          # Message Broker: rabbitmq, kafka
docs=swagger            # API Documentation: swagger
;mailer=mailhog         # Mail Sandbox: mailhog, papercut
;monitoring=grafana     # Monitoring: grafana, zabbix
;logs=kibana            # Log Management: kibana, graylog
;job=cron               # Scheduling Jobs: cron

4) Для смены фреймворка используйте команду (symfony по умолчанию):

make framework laravel

5) Устанавливаем зависимости и запустите проект:

make install

Основные возможности

  • Поддержка современных PHP-фреймворков (Symfony, Laravel).

  • Возможность работы с SQL и NoSQL базами данных (PostgreSQL, MySQL, MongoDB, Cassandra).

  • Интеграция с брокерами сообщений (RabbitMQ, Kafka).

  • Мониторинг с использованием Zabbix и Grafana.

  • Кеширование через Redis и Memcached.

  • Логирование и аналитика с использованием ELK-стека (Elasticsearch, Logstash, Kibana) или Graylog.

  • Автоматическое тестирование API через Postman.

  • Удобный запуск и настройка крон-задач через Docker.

  • и другие...

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

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

Кроме того, я бы рекомендовал использовать Enterprise Skeleton как для вашего нового проекта так и для обучения junior-разработчиков. Он помогает изучить современные подходы в разработке, такие как DDD (Domain-Driven Design), автоматизация тестирования и CI/CD.

Нам нужны контрибьюторы

Проект активно развивается, и мы всегда рады новым участникам. Если вы хотите присоединиться, вот направления, где особенно нужна помощь:

  • Интеграция Sentry: реализация мониторинга и отслеживания ошибок.

  • Подключение RoadRunner: добавление высокопроизводительного PHP-сервера.

  • Интеграция других фреймворков: добавление поддержки Yii, Slim и других популярных PHP-фреймворков.

Чтобы начать, просто форкните репозиторий, создайте новую ветку, внесите изменения и отправьте Pull Request. Мы ждем ваши идеи и улучшения!

Выводы

Enterprise Skeleton — это мощный инструмент для быстрой разработки и масштабирования корпоративных приложений. Он подходит как для небольших стартапов, так и для крупных компаний, которым нужна стабильная основа для приложений.

Пробуйте, участвуйте в разработке и делитесь своим опытом. Вместе мы можем сделать проект еще лучше!

Теги:
Всего голосов 4: ↑2 и ↓2+2
Комментарии0

Обновил Блог!

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

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

Подробнее в статье

Также буду благодарен, если найдёте баги - пишите о них в комментариях.

Теги:
Всего голосов 4: ↑0 и ↓4-4
Комментарии0

Привет, друзья! 👋

Наткнулся на интересное видео со сравнением Filament и нашего MoonShine! 🎥

https://www.youtube.com/watch?v=HOQZi8E_ED8

Всегда интересно посмотреть на свой продукт глазами других разработчиков. Особенно когда это честное сравнение, без попытки кого-то выделить или принизить. Автор очень детально разобрал оба пакета, и что меня особенно порадовало — отметил именно те моменты, на которые мы делали упор при разработке MoonShine.

Главный вывод автора — ключевое различие между пакетами в использовании Livewire. И тут я полностью согласен! Мы специально отказались от Livewire в MoonShine, чтобы добиться максимальной производительности. Например, при работе с модальными окнами мы делаем всего один запрос при первом открытии, а дальше работаем с кешированными данными.

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

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

Есть специалисты по Filamet? Давайте обсудим 💬

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии1

Ближайшие события

Совет о Joomla: использование FileLayout для рендера элементов макета.

Этот механизм используется под капотом Joomla для рендера отображения почти всех элементов интерфейса как фронта, так и админки. Обычно переиспользуемые "запчасти" выносятся в отдельные файлы: кнопки, тулбары, меню, табы и т.д. Для унификации отображения каждого элемента нужны некие данные данные и/или параметры: например, заголовок таба, надпись или onclick для кнопки, CSS класс и т.д.

<?php
use Joomla\CMS\Layout\FileLayout;

/**
 * Method to instantiate the file-based layout.
 *
 * @param   string  $layoutId  Dot separated путь к файлу, включая имя файла относительно base path
 * @param   string  $basePath  Основной путь к папке с макетами
 * @param   mixed   $options   Данные, нужные для работы макета. Registry или массив
 *
 * @since   3.0
 */
 $layout = new FileLayout('layout_file_name', JPATH_SITE . '/path/to/your/layout', ['buttonName' => 'Button name']);
// Рендерим наш макет
echo $layout->render();

Внутрь файла (/path/to/your/layout/layout_file_name.php в нашем случае) передаются данные и параметры для рендера. Получить эти данные можно следующим образом.

<?php
// Это содержимое файла /path/to/your/layout/layout_file_name.php
// Переданные данные приходят в формате Registry. Можно указать значение по умолчанию
$buttonName = $this->options->get('buttonName', 'Default name if value is empty');
?>
<button class="btn btn-primary"><?php echo $buttonName;?></button>

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Вышел WT JoomShopping Bitrix24 PRO v.3.2.0, плагин интеграции с CRM Битрикс 24

Бесплатный плагин отправки заказов из интернет-магазина JoomShopping в CRM Битрикс24. Плагин передает лиды, сделки, создаёт контакты и повторные сделки. Обеспечивает смену статуса заказа в JoomShopping при изменении стадии сделки в Битрикс 24 (двухсторонняя интеграция).Плагин поддерживает работу с плагином обратной связи Radical Form, что позволяет его использовать не только вместе с JoomShopping.

 v.3.2.0 Что нового?

Прикрепление ссылок на файлы Radical Form. Если в ваших формах обратной связи на Radical Form используется поле для загрузки файлов, то теперь эти ссылки прикрепляются к комментарию лида. Для этого необходима версия Radical Form не ниже 3.2.0.

Настройки для Radical Form. Добавлены настройки данных, включаемых в комментарий к лиду/сделке для Radical Form.

Предобработка данных перед отправкой в Битрикс 24. Добавлена возможность обрабатывать данные непосредственно перед отправкой их в Битрикс 24 в собственных файлах в папке /plugins/system/wt_jshopping_b24_pro/src/Custompreprocess. Для использования этого функционала нужно обладать знаниями PHP и хотя бы минимальными знаниями Joomla API. Вы используете этот функционал на свой страх и риск! Подробнее на странице расширения.

Страница расширения GitHub расширения Joomla Extensions Directory

Теги:
Всего голосов 3: ↑1 и ↓2+1
Комментарии0

Совет по Joomla: атрибут showon в XML-формах Joomla Form

При создании расширений Joomla порой набирается куча полей, которые загромождают экран. Их можно группировать в fieldset, а можно скрывать, если одно поле зависит от значения другого (как на видео). Разработчики используют в XML описаниях полей атрибут showon.Например, мы спрашиваем у пользователя является ли атрибут JoomShopping цветом и если да, то показываем поле для ввода цвета в HEX (как на видео).

Пример использования:

<field type="radio"
       name="is_color"
       label="Атрибут является цветом?"
       class="btn-group btn-group-yesno"
       description="Если да, то указываем код цвета в HEX или CSS-класс"
       default="0">
    <option value="0">JNO</option>
    <option value="1">JYES</option>
</field>
<field type="color"
       name="attr_color_code"
       label="Код цвета в HEX"
       showon="is_color:1"/>

Если поле is_color имеет значение "1", то поле с атрибутом showon="is_color:1" будет видно пользователю. Поддерживается логика И, ИЛИ, НЕ и несколько полей в условии. Работает даже для текстовых полей. Например, если не заполнен пароль для подключения к внешнему сервису - нет смысла показывать все остальные поля.

Почитать: Официальная документация Joomla по атрибуту showon.

Также использовать этот атрибут можно в пользовательских полях Joomla. Во вкладке "Параметры" поля укажите правило следующим образом field + ID:

field36:value1

где 36 - это id поля, от состояния которого зависит видимость данного.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии2

Совет по Joomla: как изменить вывод полей в админке?

Сегодня в Joomla-чате встретился вопрос:

Можно ли как-то убрать поля "Описание" и "Без описания" у пользовательского поля "Медиа (media)"?

Это поле типа AccessibleMedia, которое создаётся плагином группы Fields. Поле этого типа создаётся в админке для материалов, контактов и любых других компонентов, поддерживающих. В нём всегда есть поле для заполнения атрибута alt и галочка "без описания".

В админке Joomla действуют ровно те же правила, что и во фронтенде: практически всё можно переопределить в папке html шаблона. Шаблон админки Joomla по умолчанию - Atum. Поле AccessibleMedia использует для рендера layout joomla.form.field.media.accessiblemedia. Это dot-separated путь в папке layouts в корне сайта. Значит мы берём файл layouts/joomla/form/field/media/accessiblemedia.php и копируем его в папку html шаблона админки: administrator/templates/atum/html/layouts/joomla/form/field/media/accessiblemedia.php. Всё. Дальше в скопированном файле делаем всё, что хотим, не боясь при обновлении Joomla потерять наши исправления. В данном случае можно вывести рендер одного поля вместо трёх.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Совет по Joomla: использование методов плагинов в любом месте Joomla 4 / Joomla 5.

Нередко расширения Joomla в готовом виде состоят из пакета - комплекта плагинов, модулей, библиотек. Расширения из одного пакета могут нуждаться в одном и том же методе. В Joomla 4 и старше новая (хм-м, 2 года уже прошло...) архитектура плагинов позволяет обращаться к методам плагина откуда угодно, что может стать удобным решением задачи.

Обращение к методу "Сделать хорошо"
Обращение к методу "Сделать хорошо"

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

<?php
use Joomla\CMS\Factory;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Plugin\PluginHelper;

// Получим параметры компонента
$component_params = ComponentHelper::getParams('com_mycomponent');
// Получим имя плагина-провайдера
$plugin_name = $component_params->get('data_provider');
// Проверим, а включён ли плагин?
if(PluginHelper::isEnabled('system', $plugin_name))
{
     // Загрузим плагин
     $plugin_provider = Factory::getApplication()->bootPlugin($plugin_name, 'system');
     // Получим данные из него напрямую
     $external_data = $plugin_provider->getExternalData($any_id);
}

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Обновление компонента SW JProjects v.2.0.0

Скриншот панели администратора компонента SW JProjects в Joomla 5
Скриншот панели администратора компонента SW JProjects в Joomla 5

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

v.2.0.0. Что нового?

Joomla 5 ready. Сделан большой рефакторинг. Компонент переписан на архитектуру расширений Joomla 5 и работает без плагина обратной совместимости.

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

Оглавление в документации. Теперь при чтении документации вам доступны все разделы, связанные с данным расширением.

Плагины для вставки проекта в контент. Добавлено 2 плагина: контент плагин и плагин кнопки редактора. Контент плагин позволяет превращать non-SEF ссылки вида index.php?option=com_swjprojects... в SEF. А также обрабатывает шорт-коды вида {swjprojects project_id=1 tmpl=your_tmpl_name}. Таким образом вы можете вставлять информацию о проектах везде, где работают плагины контента. Плагин кнопки редактора позволяет легко вставлять ссылки или шорт-коды с выбранным макетом.

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

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

GitHub расширения

Joomla Extensions Directory

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Как JIT в PHP 8 ускоряет парсинг CSV-файлов

С выходом PHP 8 появилась одна из самых мощных функций — JIT-компиляция. Она ускоряет выполнение PHP-скриптов, и это особенно полезно при парсинге больших CSV-файлов.

JIT компилирует opcode в машинный код, который выполняется напрямую на процессоре. В результате скомпилированный код используется в циклах, исключая повторную интерпретацию.

Как это помогает при обработке файла:

  1. Ускорение циклов: Цикл обрабатывает строки файла быстрее благодаря компиляции его тела в машинный код.

  2. Оптимизация работы со строками: Функции типа fgetcsv становятся эффективнее, что особенно важно при сложной обработке данных.

  3. Снижение накладных расходов: JIT минимизирует затраты на вызов функций, делая их выполнение более быстрым.

Можно провести эксперимент: подготовить CSV-файл с 10 миллионами строк и запустить PHP-скрипт — с включенным JIT и без него. Получится, что включение JIT позволит сократить время на парсинг файла примерно на 33%.

Больше деталей и пример скрипта найдете в Телеграм-канале Саши Шутая, нашего руководителя отдела PHP.

Теги:
Всего голосов 6: ↑3 и ↓3+2
Комментарии3