При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте 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).

Полезные ресурсы Joomla

Ресурсы сообщества:

Telegram:

Комментарии (0)