Меню KDT

Виджет "Динамические списки/поля"

Динамический список - это список состоящий из элементов, которые содержат одинаковые поля (список сотрудников, список партнеров компании, список достижений и т.п.).

Для использования в шаблоне динамических полей, в 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 содержит значения, которые будут отображаться по умолчанию, пока динамический список не будет заполнен администратором сайта.

Код обязательно должен обладать отступом (tabs).