ddGetMultipleField

Snippet
  • Версия: 3.3
  • Выпущено:
  • Метки: Manager, General
  • Использует:
Скачать 1431 скачивание

Описание

Сниппет для вывода данных, разделённых через определённые разделители. Удобно использовать для вывода значений полей документов, сформированных виджетом mm_ddMultipleFields. Возможности:

  • Получение необходимого поля документа (и TV) по id. Параметры «inputString_docField» и «inputString_docId».
  • Вывод необходимого количества значений по номерам строк и и значениям. Параметры «startRow», «totalRows» и «filter».
  • Вывод необходимых значений по номерам колонок. Параметр «columns».
  • Сортировка строк по значениям колонок перед выводом ('ASC', 'DESC', 'RAND', 'REVERSE'), в том числе множественная сортировка. Параметры «sortDir» и «sortBy».
  • Вывод значений через разделители строк и колонок. Параметры «rowGlue» и «colGlue».
  • Удаление пустых значений колонок и строк перед выводом. Параметры «removeEmptyRows» и «removeEmptyCols».
  • Типографирование значений перед выводом (используется сниппет ddTypograph). Параметр «typography».
  • URL-кодирование результата перед выводом. Параметр «urlencode».
  • Вывод результата в JSON. Параметр «outputFormat».
  • Вывод значений по шаблонам (чанкам) строк и колонок (в шаблоне строк также доступен плэйсхолдер [+rowNumber+] с номером строки). Параметры «rowTpl» и «colTpl».
  • Вывод результата выполнения в чанк «outerTpl» с передачей дополнительных данных через параметр «placeholders».

Список изменений

  • Добавлена возможность использовать встроенные шаблоны, используя префикс «@CODE:». Работает с «$rowTpl», «$colTpl», «$outerTpl».
  • Дополнительные данные из параметра «placeholders» теперь также будут переданы в шаблоны строк и колонок (параметры «rowTpl» и «colTpl»).
  • Дополнительные данные, передаваемые в параметр «placeholders» должны быть в виде query string (старый формат поддерживается, но не рекомендуется к использвоанию).
  • Следующие параметры переименованы (старые имена пока поддерживаются, но не рекомендуются к использованию):
    • «string» → «inputString».
    • «docField» → «inputString_docField».
    • «docId» → «inputString_docId».
  • Рефакторинг: Результат сниппета будет возвращён в любом случае (пустая строка для пустого результата).

Документация

Из пары параметров «inputString»/«inputString_docField» необходимо передавать лишь один.

Описание параметров

Название Описание Допустимые значения Значение по умолчанию
inputString * Исходная строка, содержащая значение с разделителями. {separated string}
inputString_docField Имя поля документа / TV, содержащего значение. В этом случае параметр «inputString» игнорируется, значение получается из поля документа. {string}
inputString_docId ID документа, значение поля которого нужно получить. Если id не задан, берётся id текущего документа. {integer}
rowDelimiter Разделитель между строками в исходной строке. {string; regexp} '||'
colDelimiter Разделитель между колонками в исходной строке. {string; regexp} '::'
startRow Номер строки, начиная с которой необходимо возвращать (строки нумеруются с 0). {integer} 0
totalRows Количество возвращаемых строк. При значении == 'all' будут возвращены все имеющиеся строки. {integer; 'all'} 'all'
columns Номера колонк через запятую, которые нужно вернуть (колонки нумеруются с 0). При значении == 'all' будут возвращены все колонки. {comma separated string; 'all'} 'all'
filter Фильтр по значениям колонок. Например, при '0::a||0::b||1::1' выведутся только строки, в которых значение колонки 0 равно 'a' или 'b' и значение колонки 1 равно '1'. {separated string}
removeEmptyRows Удалять пустые строки? {0; 1} 1
removeEmptyCols Удалять пустые колонки? {0; 1} 1
sortBy Номер колонки (нумеруются с ноля), по которой необходимо сортировать. Для множественной сортировки параметры указываются через запятую (например: '0,1'). {comma separated string} 0
sortDir Направление сортировки строк. При значении == 'REVERSE' строки будут возвращены в обратном порядке. {'ASC'; 'DESC'; 'RAND'; 'REVERSE'; ''}
typography Номера колонок через запятую, значения которых нужно типографировать (колонки нумеруются с 0). Если не задано, ничего не типографируется. {comma separated string}
outputFormat Формат, в котором возвращать результат. {'html'; 'JSON'; 'array'; 'htmlarray'} 'html'
rowGlue Разделитель (объединитель) между строками при выводе. Может использоваться совместно с шаблоном «rowTpl». {string}
colGlue Разделитель (объединитель) между колонками при выводе. Может использоваться совместно с шаблоном «colTpl» (но не «rowTpl», по понятным причинам). {string}
rowTpl Шаблон для вывода строк (параметр «outputFormat» должен быть == 'html').

Доступные плэйсхолдеры:

  • [+rowNumber+] — номер строки, начинающийся с 1;
  • [+rowNumber.zeroBased+] — номер строки, начинающийся с 0;
  • [+total+] — общее количество строк;
  • [+resultTotal+] — количество возвращаемых строк;
  • [+col0+], [+col1+], … — значения соответствующих колонок.

Передавать код напрямую без чанка можно начиная значение с «@CODE:».

{string: chunkName|string}
colTpl Список шаблонов для вывода колонок, через запятую (параметр «outputFormat» должен быть == 'html'). Если шаблонов меньше, чем колонок, для всех недостающих выставляется последний указанный шаблон. Значение 'null' — без шаблона.

Доступные плэйсхолдеры:

  • [+val+] — значение;
  • [+rowNumber+] — номер строки, начинающийся с 1;
  • [+rowNumber.zeroBased+] — номер строки, начинающийся с 0.

Передавать код напрямую без чанка можно начиная значение с «@CODE:».

{comma separated string: chunkName|string; 'null'}
outerTpl Шаблон внешней обёртки (при «outputFormat» != 'array').

Доступные плэйсхолдеры:

  • [+result+] — результат сниппета;
  • [+total+] — общее количество строк;
  • [+resultTotal+] — количество возвращаемых строк;
  • [+rowY.colX+] — значение (где «Y» — номер строки, «X» — номер колонки).

Передавать код напрямую без чанка можно начиная значение с «@CODE:».

{string: chunkName|string}
placeholders Дополнительные данные в виде query string которые будут переданы в шаблоны «outerTpl», «rowTpl» and «colTpl». Например, «pladeholder1=value1&pagetitle=My awesome pagetitle!». {query string}
urlencode Надо URL-кодировать результирующую строку (при «outputFormat» != 'array')? Строка кодируется согласно RFC 3986. {0; 1} 0
totalRowsToPlaceholder Имя внешнего плэйсхолдера, в который нужно вывести общее количество строк. Если параметр не задан — не выводится. {string}
resultToPlaceholder Имя внешнего плэйсхолдера, в который нужно сохранить результат работы сниппета вместо обычного вывода. Если параметр не задан — сниппет просто возвращает реузльтат. {string}

Примеры

Вывод изображений с описаниями

Исходная строка (пусть находится в TV документа «images»):

assets/images/some_img1.jpg::Изображение 1||assets/images/some_img2.jpg::Изображение 2

Вызов сниппета в шаблоне документа:

[[ddGetMultipleField?
	&inputString=`[*images*]`
	&rowTpl=`images_item`
]]

Код чанка «images_item»:

[+col1+]:
<img src="[+col0+]" alt="[+col1+]" />

Получение и вывод данных из поля (TV) «prices» документа с id = 25 в виде таблицы, если что-то есть и ничего, если нету

Исходное значение поля:

Яблоки вкусные::100::кг||Гвозди обыкновенные::5 000::центнер||Коты::865::шт

Вызов сниппета (где угодно):

[[ddGetMultipleField?
	&inputString_docField=`prices`
	&inputString_docId=`25`
	&outerTpl=`prices`
	&rowTpl=`prices_item`
]]

Код чанка «prices_item»:

<tr>
	<td>[+rowNumber+]</td>
	<td>[+col0+]</td>
	<td>[+col1+] руб./[+col2+]</td>
</tr>

Код чанка «prices»:

<h1>Табличка цен</h1>
<table>
	[+result+]
</table>

Вывод тегов документа через запятую с использованием регулярного выражения в «rowDelimiter»

Пусть теги документа у нас хранятся в TV «tags» и к этой TV у нас применён виджет mm_widget_tags. Пользователь заполняет теги через запятую, при этом, может заполняться как с пробелами по краям, так и без них.

Значение TV «tags»:

Коты, Кошки,Собаки , Медведи ,Слоны

Вызов сниппета в шаблоне документа:

[[ddGetMultipleField?
	&inputString=`[*tags*]`
	&rowDelimiter=`/\s*,\s*/`
	&rowGlue=`, `
	&rowTpl=`tags_row`
]]

Код чанка «tags_row»:

<a href="[~[*parent*]~]?tags=[+col0+]">[+col0+]</a>

Результат:

<a href="[~[*parent*]~]?tags=Коты">Коты</a>,
<a href="[~[*parent*]~]?tags=Кошки">Кошки</a>,
<a href="[~[*parent*]~]?tags=Собаки">Собаки</a>,
<a href="[~[*parent*]~]?tags=Медведи">Медведи</a>,
<a href="[~[*parent*]~]?tags=Слоны">Слоны</a>

Передача дополнительных данных через параметр «placeholders»

[[ddGetMultipleField?
	&inputString=`Серый::8 кг::любит мясо||Рыжий::6 кг::вегетарианец`
	&outerTpl=`cats`
	&rowTpl=`cats_item`
	&colTpl=`cats_item_color,null,null`
	&placeholders=`kind=коты&price=не продаётся.&colorTitle=Шерсть густая, хорошая`
]]

Код чанка «cats» (вместо «[+kind+]» подставятся «коты»):

<h1>Наши любимые [+kind+], [+resultTotal+] штук.</h1>
[+result+]

Код чанка «cats_item» (вместо «[+price+]» подставится «не продаётся.»):

[+rowNumber+]. [+col0+], весит [+col1+], [+col2+] — <i>[+price+]</i><br />

Код чанка «cats_item_color» (вместо «[+colorTitle+]» подставится «Шерсть густая, хорошая»):

<span title="[+colorTitle+]">[+val+]</span>

Примеров здесь можно напридумывать великое множество. Так что, если что не понятно, спрашивайте в комментариях ниже ↓