Совет по Joomla: группированные списки select с помощью HTMLHelper select.groupedlist

  • Пятница, 20 декабря 2024
Совет по Joomla: группированные списки select с помощью 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
            ]
        ];

Почитать: 

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. Муж. Отец 3 детей.

Россия, Саратов. https://web-tolk.ru info@web-tolk.ru

Статьи автора

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

Логотип Joomla

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

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

Свернуть

Коротко о главном в Joomla

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

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

Видео