ddGetMultipleField

    ddGetMultipleField Сниппет для вывода данных

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

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

    Автор: DivanDesign

    Возможности:

    • Получение необходимого поля документа (и 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».

    Из пары параметров «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=``
    &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=`Manager, General`
    &rowDelimiter=`/\s*,\s*/`
    &rowGlue=`, `
    &rowTpl=`tags_row`
    ]]
    

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

    <a href="dlbuildmenu/kratkoe-opisanie?tags=[+col0+]">[+col0+]</a>

    Результат:

    <a href="dlbuildmenu/kratkoe-opisanie?tags=Коты">Коты</a>,
    <a href="dlbuildmenu/kratkoe-opisanie?tags=Кошки">Кошки</a>,
    <a href="dlbuildmenu/kratkoe-opisanie?tags=Собаки">Собаки</a>,
    <a href="dlbuildmenu/kratkoe-opisanie?tags=Медведи">Медведи</a>,
    <a href="dlbuildmenu/kratkoe-opisanie?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>

    Примеров здесь можно напридумывать великое множество.