HTMLHelper select.groupedlist

Порой в выпадающих списках нужно группировать большое количество значений для удобного восприятия.

В HTML это выглядит как:

<select>
   <optgroup label="Группа 1">
    <option value="1">Значение 1</option>
    <option value="2">Значение 2</option>
    <option value="3">Значение 3</option>
   </optgroup>
   <optgroup label="Группа 2">
    <option value="4">Значение 4</option>
    <option value="5">Значение 5</option>
    <option value="6">Значение 6</option>
   </optgroup>
   </select>

Как вывести такой список select с помощью Joomla программным методом? Для этого существует метод groupedlist() класса Select HTMLHelper. В коде он вызывается с помощью HTMLHelper::_('select.groupedlist'). Нужно подготовить массивы данных определенной структуры. Это массив с группами опций для select.

<?php
$groups = [
            'shop' => [
                'id' => 'shop',
                'text' => 'Интернет-магазин',
                'items' => $tariff_shop_options
            ],
            'dostavka' => [
                'id' => 'dostavka',
                'text' => 'Доставка',
                'items' => $tariff_dostavka_options
            ]
        ];

Почитать: Как добавить свой повторяемый элемент интерфейса в класс HTMLHelper Joomla 4+.

shop и dostavka - это ключи, необходимые при построении otpgroup. Вложенные массивы - это данные для группы, где:

  • id - это атрибут id <optgroup>. Можно не указывать.
  • text - это заголовок <optgroup>
  • items - это уже готовые <option value="">.

Готовим предварительно массивы с options:

<?php
$tariff_shop_options = [];
$tariff_dostavka_options = [];
foreach ($tariff_shop as $tariff)
{
    $tariff_shop_options[] = HTMLHelper::_('select.option', $tariff['code'], $tariff['name'] . ' (code: ' . $tariff['code'] . ')');
}
foreach ($tariff_dostavka as $tariff)
{
    $tariff_dostavka_options[] = HTMLHelper::_('select.option', $tariff['code'],     $tariff['name'] . ' (code: ' . $tariff['code'] . ')');
}

И потом рендерим группированный список с помощью select.groupedlist:

<?php
echo HTMLHelper::_('select.groupedlist', $groups, 'field_name', ['id' => 'field_id_attr', 'group.id' => 'id']);

group.id - это ключ, по которому в массивах групп будет назначен атрибут id для <optgroup>.

Подробнее можно посмотреть в файле libraries/src/HTML/Helpers/Select.php.

Толкачев Сергей Юрьевич
Толкачев Сергей Юрьевич

Joomla-разработчик. Контрибьютер ядра Joomla. Один из ведущих Telegram-канала русскоязычного Joomla-сообщества JoomlaFeed, один из модераторов чата русскоязычного Joomla-сообщества. Мои расширения в официальном маркетплейсе расширений Joomla - Joomla Extensions Directory. Имею публикации в официальном журнале международного Joomla-сообщества - Joomla Community Magazine.

Муж. Отец 3 детей.

Россия, Саратов.

Расширения Joomla WebTolk

90 Всего расширений
11 Категорий
399 Выпущено версий
387356 Всего скачиваний
Корзина
Корзина пуста