Использование атрибута showon для создания зависимых выпадающих списков в Joomla 5.3.3
Я не раз слышал о том что можно использовать атрибут showon для создания зависимых выпадающих списков, но не понимал как именно использовать. Скрывать один зависимый list и показывать другой мне совсем не представлялось удобным решением. На мой взгляд в зависимом выпадающем списке должна быть загрузка опций или отображение только актуальных.
Удивил меня ChatGPT, когда вместо JavaScript-кода предложил использовать атрибут showon, но не для самого элемента list, а для его опций.
<field
name="fielda"
type="list"
label="FIELDA_LABEL">
<option value="editor">Editor</option>
<option value="text">Text</option>
<option value="textarea">Textarea</option>
</field>
<field
name="fieldb"
type="list"
label="FIELDB_LABEL">
<option value="0">Always Visible</option>
<option showon="fielda:text,textarea" value="2">Option 2</option>
<option showon="fielda:text" value="3">Option 3</option>
</field>А вот так можно применять атрибут showon в своём элементе, который показывает значения выбранной характеристики товара JoomShopping:
/**
* @return array
*
* @since 1.0.0
*/
protected function getOptions(): array
{
require_once(JPATH_SITE . '/components/com_jshopping/bootstrap.php');
$options = parent::getOptions();
/** @var ProductFieldValueTable $productfieldvalue */
$productfieldvalue = JSFactory::getTable('productfieldvalue');
$list = $productfieldvalue->getAllList();
$default = $this->element['default'] ?? null;
if (isset($default) && ((string) $default) === '')
{
$options[] = HTMLHelper::_('select.option', '', '');
}
foreach ($list as $item)
{
$conditions = FormHelper::parseShowOnConditions('extra_field_id:' . $item->field_id, $this->formControl, $this->group);
$encodedConditions = htmlspecialchars(json_encode($conditions));
$options[] = HTMLHelper::_(
'select.option',
$item->id,
$item->name,
[
'attr' =>
[
'data-showon' => $encodedConditions
],
'option.attr' => "optionattr",
]
);
}
return $options;
}