Обновить

Использование атрибута 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;
}
Теги:
Рейтинг0
Комментарии0

Публикации

Ближайшие события