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








