При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте 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 писать в одинарные.
🙏 За подсказанное решение огромное спасибо участникам Joomla-сообщества - разработчикам Дмитрию Васюкову и Игорю Бердичевскому (@Septdir).
