Почитать другие заметки или статьи

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

При работе с Joomla у нас есть три способа создания выпадающих списков:

1) Путем вставки в XML файл формы поля с типом «LIST». Подробнее о типах полей можно прочитать на странице официальной документации.

2) С помощью класса «HTMLHelper». Данный способ мы обязательно рассмотрим чуть подробнее.

3) Путем создание своего кода. Здесь всё зависит от ваших навыков и фантазии. Рассматривать данный способ мы не будем.

Красивый множественный выбор

Как известно, выпадающие списки могут быть, как с простым выбором, где пользователь может выбрать одно любое значение, так и со множественным.

Для того, чтобы получить список со множественным выбором мы должны добавить к нему атрибут «MULTIPLE» со значением «TRUE».

Например, для XML поля это будет выглядеть так:

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

Нюанс в том, что по умолчанию в Joomla 4 и Joomla 5, выпадающий список со множественным выбором отобразится в виде текстового поля с возможностью множественного выбора путем нажатия на клавишу CTRL.

Это не совсем удобно. Пользователь давно привык к выпадающим спискам реализованным с помощью библиотеки «chosen».

Пример такого списка показан на скриншоте ниже:

Осталось дело за малым: подключить библиотеку «chosen». Благо такая возможность предоставлена нам разработчиками системы.

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

HTMLHelper::_('formbehavior.chosen', 'select', null, array('disable_search_threshold' => 0 ));

Выпадающий список с помощью класса HTMLHelper

Класс HTMLHelper значительно упрощает жизнь разработчика, если этот самый разработчик знает хотя бы о половине возможностей заложенных в этот класс.

Нам половина не нужна, однако, выпадающий список с помощью класса HTMLHelper мы создадим.

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

Ниже показан код, который предлагаю разобрать

use \Joomla\CMS\HTML\HTMLHelper;

HTMLHelper::_('formbehavior.chosen', 'select', null, array('disable_search_threshold' => 0 ));

$items = array();
$items[] = array('value'=> '0', 'text' => 'Кот');
$items[] = array('value'=> '1', 'text' => 'Собака');
$items[] = array('value'=> '2', 'text' => 'Бегемот');

$name = 'animals';
$attibutes = 'multiple="true"';
$value = 'value';
$text = 'text';
$selected = array(0, 2);
$id = 'animals';
$toText = false;

$list = HTMLHelper::_('select.genericlist', $items, $name, $attibutes, $value, $text, $selected, $id, $toText);

echo $list;

Вначале нашего кода мы подключаем библиотеку «chosen», которая сделает наш выпадающий список красивым и удобным.

Далее разберем переменные:

$items — собственно, массив с данными. По сути это массив ассоциативных массивов, где с ключом «value» мы храним соответствующий атрибут тега option нашего списка . А с ключом «text» его текстовое содержимое.

При желании и необходимости мы можем отправить не только массив ассоциативных массивов, но и массив объектов.

$name — в данной переменной мы задаем одноименный атрибут нашего списка. То есть, имя.

$attibutes — здесь мы передаем дополнительные атрибуты. В нашем случае это атрибут «multiple».

$value — в переменной $value мы передаем наименование ключа, отвечающего за хранение соответствующего атрибута.

$text — в переменной $text хранится ключ, отвечающий за хранение текстового содержимого элемента списка.

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

$id — здесь мы задаем атрибут «id» нашего списка.

$toText — данная переменная может принимать либо значение «true», либо «false». В первом случае текстовые значения нашего массива $items будут обработаны классом Text.

И если в массиве будут обнаружены языковые константы, с помощью класса Text, будет подставлен их перевод.

В переменную $list мы сохраняем наш выпадающий список и далее с помощью команды echo выводим его на экран:

Заключение

Как видим, наш список не просто отобразился, но отобразился с уже выбранными значениями, которые мы передали в переменной $selected.

Работа с классом HTMLHelper избавляет разработчика от регулярного изобретения велосипеда и позволяет создать выпадающий список в Joomla 4 или Joomla 5 в предельно короткие сроки.

Если у вас остались вопросы и предложения, жду их в своей группе по ссылке ниже:

https://vk.com/sitogon

С уважением, Владимир Егоров