При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default
для полей.
❓ Когда это нужно?
Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Joomla\Registry\Registry
(писал об этом ранее: Совет по Joomla: значение переменной по умолчанию с помощью класса Joomla\Registry\Registry.) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда.
🧐 Но как сделать то же самое для интерфейса админки?
Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form
ещё нет данных и параметры по умолчанию выставляются из атрибутов default
в xml-полях.
<field name="showdesc" type="radio"
label="PLG_CFI_PARAM_SHOWDESC"
class="btn-group btn-group-yesno"
default="1">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина. Для поля списков type="list"
можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"
name="article_fields"
label="article_fields"
description="article_fields_desc"
layout="joomla.form.field.list-fancy-select"
multiple="true"
default="id"
>
<option value="id">id</option>
<option value="title">title</option>
<option value="alias">alias</option>
<option value="introtext">introtext</option>
<option value="fulltext">fulltext</option>
<option value="state">state</option>
</field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...
Оказывается, так можно сделать. Для этого в атрибуте default
нужно указать json с нужными параметрами в виде {int}key : {string}value
.
Например, default='{"0":"id","1":"title"}'
.
<field type="list"
name="article_fields"
label="article_fields"
description="article_fields_desc"
layout="joomla.form.field.list-fancy-select"
multiple="true"
default='{"0":"id","1":"title"}'
>
<option value="id">id</option>
<option value="title">title</option>
<option value="alias">alias</option>
<option value="introtext">introtext</option>
<option value="fulltext">fulltext</option>
<option value="state">state</option>
</field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode
не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default
писать в одинарные.
🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову и Игорю Бердичевскому.