Динамический список - это список состоящий из элементов, которые содержат одинаковые поля (список сотрудников, список партнеров компании, список достижений и т.п.). Для использования в шаблоне динамических полей, в settings.xml
необходимо добавить следующее:
<widget>
<type>dynamiclist</type>
<name>workers</name>
<label>Сотрудники компании</label>
<fields>
<datatype>image</datatype>
<name>img</name>
<label>Фотография сотрудника</label>
<maxSize>15360</maxSize>
<width>150</width>
<height>200</height>
<stretch>1</stretch>
<extensions>png</extensions>
<extensions>jpeg</extensions>
<extensions>jpg</extensions>
<extensions>gif</extensions>
<extensions>svg</extensions>
</fields>
<fields>
<datatype>text</datatype>
<name>fio</name>
<label>ФИО сотрудника</label>
</fields>
<fields>
<datatype>bigtext</datatype>
<name>description</name>
<label>Описание</label>
</fields>
<uq>0</uq>
</widget>
При этом название ( Затем в шаблон нужно вставить следующие строки:name
) у виджета должно быть уникальным.uq = 1
означает, что виджет одинаковый для всех страниц, а uq = 0
означает, что виджет разный для всех страниц.fields
- это список полей, которые должен содержать виджет.
{% set widgetname = 'workers' %}
{% set default = {
0: {
ru: {
img: template.path~'/images/ivan_ivanov.jpg',
fio: 'Иванов Иван Иванович',
description: 'Доктор технических наук, Академик АН РК, Лауреат государственной премии, почетный изобретатель, владелец более 20 патентов, эксперт по вопросам логистики акредитованный АО "НАТР"',
}
}
}%}
{% set list = widgetData(widgetname, default) %}
<div data-widget-name="{{widgetname}}"{% if user.isAdmin %} class="widget-render" data-href="/options/widget/settings/{{page.pkid}}/{{widgetname}}"{% endif %}>
{% if list|length == 0 %}
<center><i>Список пуст</i></center>
{% else %}
{% for data in list %}
{% set d = getLangData(data) %}
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<td valign="top">
<img src="{{d.img }}" />
<div class="header">{{d.fio}}</div>
</td>
<td class="td-middle" valign="top" style="text-align: justify;">
<div class="descrip">
{{d.description | purify | raw}}
</div>
</td>
</tr>
</table>
{% endfor %}
{% endif %}
</div>
Выражение Переменная purify | raw
это 2 twig фильтра (purify
и raw
), которые в совокупности означают что нужно запретить экранизирование тегов. Обязательно нужно указать purify
, чтобы система обрезала все ненужные теги и параметры, иначе сайт будет подвержен xss уязвимостям.default
содержит значения, которые будут отображаться по умолчанию, пока динамический список не будет заполнен администратором сайта.