webdev

  • Свои типы полей в Joomla.

    Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

    Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс 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 #разработка

  • Как вызвать событие только для указанной (одной или более) группы плагинов в Joomla 5Системные...

    Как вызвать событие только для указанной (одной или более) группы плагинов в Joomla 5Системные плагины в Joomla срабатывают всегда, но большое их количество может негативно сказаться на скорости работы Приложения. А во-вторых ошибка в системном плагине, добавляющем кнопку в тулбар может обрушить механизм регистрации / авторизации пользователя. Поэтому для лучшего быстродействия и надёжности работы системы плагины в Joomla разделены на группы. Каждая группа срабатывает только в определённом месте и в определённый момент времени. Небольшой пост-шпаргалка для Joomla-разработчиков от участника нашего сообщества Виталия Некрасова (@vitalik_a) подскажет как в своём коде сделать то, что написано в заголовке поста 😎Читать пост на Хабре#joomla #php #разработка #webdev

  • Рендер пользовательского поля внутри другого пользовательского поля. Joomla 5.3

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

    <?php
    $joomlaFieldContentPlugn->onContentPrepare('com_content.article', $fakeItem, $app->getParams());

    Joomla постепенно переходит от простого указания аргументов для триггеров плагинов к собственным классам событий. Это позволяет не запоминать порядок передачи аргументов класса и использовать человекопонятные методы $event->getContext(), $event->getItem() и т.д. А то в одном месте в Joomla было $article, в другом - $item, в третьем ещё как-то... Порядку больше становится.

    Сегодня обновил сайт клиентов до Joomla 5.3. В ней обновили контент-плагин fields и мой финт ушами с вызовом метода плагина отвалился потому, что я передавал в нём 3 аргумента, вместо одного. И для события onContentPrepare это должен быть объект класса ContentPrepareEvent. Как меняется фрагмент кода из предыдущего поста:

    <?php
    // мы находимся в файле макета поля
    
    use Joomla\CMS\Event\Content\ContentPrepareEvent;
    use Joomla\CMS\Factory;
    
    $app = Factory::getApplication();
    $fakeItem = new \stdClass();
    // Получаем id текущего материала из объекта Input
    $fakeItem->id = $app->getInput()->getInt('id');
    //  - это шорт код вставки поля с id 29 - "ассортимент проекта"
    // к содержимому поля конкатенируем шорт-код для обработки
    $fakeItem->text = $field->value . '';
    // Получаем объект плагина
    $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 4 Rest API: создаем свои JSON-эндпоинты с нуляПо умолчанию Joomla отправляет ответы в...

    Joomla 4 Rest API: создаем свои JSON-эндпоинты с нуляПо умолчанию 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

  • Joomla-дайджест. 1-й квартал 2025 года

    Joomla-дайджест. 1-й квартал 2025 года

    Joomla-дайджест. 1-й квартал 2025 года.После долгого перерыва читайте все главные новости из мира Joomla с момента выхода Joomla 5.2.0 (15 октября 2024 года) в одной статье. Но для удобства в названии ограничимся первым кварталом 2025 года. Традиционно наш дайджест обозревает новости, расширения, шаблоны и статьи из мира Joomla.Читать дайджест на ХабреПодпишись на @joomlafeed#joomla #расширения #разработка #webdev

  • Обзор MVCFactory в Joomla 5Эта статья - перевод на русский язык раздела официальной документации...

    Обзор MVCFactory в Joomla 5Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с собственными компонентами.Перевод выполнил участник нашего сообщества Виталий Некрасов (@vitalik_a).Читать статью на ХабреОригинал: Joomla! Programmers Documentation for Joomla 5.2Подпишись на @joomlafeed#joomla #php #webdev #разработка

  • Использование своего класса MVC фабрики в компоненте Joomla 5У участника нашего сообщества Виталия...

    Использование своего класса MVC фабрики в компоненте Joomla 5​У участника нашего сообщества Виталия Некрасова (@vitalik_a) назрела необходимость переопределить метод createModel() в своём компоненте. Он захотел сделать это правильно, заменив класс MVC фабрики своим и поделился своим опытом в посте на Хабре.Подпишись на @joomlafeed#joomla #php #webdev #разработка

  • Заменяем устаревший метод Joomla\CMS\Toolbar\Toolbar::getInstance() в Joomla 5.2.5

    👩‍💻 Заменяем устаревший метод Joomla\CMS\Toolbar\Toolbar::getInstance() в Joomla 5.2.5.Этот метод нужен для работы с кнопками тулбара в Joomla. Как правильно получить объект текущего тулбара в Joomla 5.x расскажет пост на Хабре участника нашего сообщества Виталия Некрасова (@vitalik_a) Читать постПодпишись на @joomlafeed#joomla #php #webdev #разработка

  • Собственные макеты вывода для пользовательских полей Joomla

    Собственные макеты вывода для пользовательских полей JoomlaМы привыкли использовать механизм...

    Мы привыкли использовать механизм переопределения макетов Joomla: скопируй нужный тебе файл макета в папку html шаблона и твори там что хочешь.

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

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

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

  • E-mail шаблоны Joomla 5: добавление и просмотр своих переменных

    В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.

  • Как добавить свой таб или поле в интерфейс Joomla с помощью плагина. «Joomla way».

    Задачи могут быть самые разные: поле аватара для пользователя в com_users, дополнительный таб в форму редактирования материала, поле связи одной сущности с другой и т.д. Сразу оговорюсь, что бывает и "non-Joomla way" - то есть подходы, которые не предполагаются ядром CMS, но при этом и явно не запрещаются. Сейчас речь пойдёт о традиционном. 

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

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

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

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Логотип Joomla

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Свернуть

Новости портала

Новое в блогах

Видео