Порой в выпадающих списках нужно группировать большое количество значений для удобного восприятия.
В 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.
Ранее эта статья была опубликована на сайте автора.