Использование атрибута 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; }
