Дополненный перевод официальной документации: MIGX.Frontend-Usage
Плейсхолдеры getImageList
- [[+fieldname]] — любое поле из конфигурации MIGX или из переданных параметров в сниппет
- [[+idx]] — порядковый номер, начиная с 1
- [[+_first]] — вернет 1, если это первая запись
- [[+_last]] — вернет 1, если это последняя запись
- [[+_alt]] — вернет 1, если это четная запись
- [[+total]] — общее число элементов (можно изменить через &totalVar)
- [[+property.name]] — выведет параметр с именем &name=`` в вызове getImageList. Например, при вызове:
[[getImageList? &tvname=`slider` &tpl=`@CODE: [[+image]]`]]
плейсхолдер [[+property.tvname]] будет иметь значение «slider».
Параметры getImageList
- &tvname — название TV с типом ввода MIGX
- &tpl — имя чанка для вывода каждой записи. Можно использовать @CODE:, @FILE:, @FIELD
- &docid — можно указать ID документа, чей TV надо обработать. По умолчанию: [[*id]]
- &value — JSON строка для обработки getImageList. Если указан, параметры &docid и &tvname будут проигнорированы. Можно использовать для вывода в getImageList еще одного вызова getImageList
- &limit — количество записей для вывода. По умолчанию: 0
- &offset — количество записей, которые необходимо пропустить. По умолчанию: 0
- &totalVar — имя плейсхолдера, в котором содержится общее количество записей. По умолчанию: total
- &randomize — если установить 1, результаты будут отсортированы в случайном порядке. По умолчанию: 0
- &preselectLimit — вместе с параметров &randomize можно указать число записей, которые выведутся в любом случае. По умолчанию: 5
- &where — JSON строка с условиями выборки, например: {«active:=»:«1»,«rating:>»:«5»}
- &sort — JSON строка с условиями сортировки. Можно указывать несколько параметров: [{«sortby»:«age»,«sortdir»:«DESC»,«sortmode»:«numeric»},{«sortby»:«name»,«sortdir»:«ASC»}]
- &toPlaceholder — сохранить вывод в плейсхолдер
- &toSeparatePlaceholders — сохранить каждую запись в отдельный плейсхолдер. Например, &toSeparatePlaceholders=`item` создаст плейсхолдеры: [[+item.1]], [[+item.2]] и т.д.
- &outputSeparator — разделитель между результатами
- &wrapperTpl — чанк-обертка для вывода результатов. Принимает плейсхолдер [[+output]] для вывода результатов
- &processTVs — включить режим обработки вывода TV параметров (для полей с inputTV). По умолчанию: 1
Выбор шаблона для каждого результата
Для каждой записи можно использовать свой шаблон вывода. Для этого в конфигурации MIGX TV указываем поле для выбора шаблона, например:
{
"field": "chunk",
"caption": "Чанк для вывода",
"inputTVtype": "listbox",
"inputOptionValues": "Вывод 1==migx_tpl_1||Вывод 2==migx_tpl_2"
}Далее, создать чанки для вывода: migx_tpl_1, migx_tpl_2. Чтобы не создавать чанки, можно использовать @CODE: и @FILE: (как для параметра &tpl). И потом вызвать getImageList со следующими параметрами:
[[getImageList? &tvname=`myMIGXtv` &tpl=`@FIELD:chunk` ]]
&where — JSON строка с условиями выборки, например: {«active:=»:«1»,«rating:>»:«5»}Условие только одно можно поставить, к сожалению :(function filterItems($where, $items) { $tempitems = array(); foreach ($items as $item) { $include = true; foreach ($where as $key => $operand) {{"published":"1","gallery":"gallery_1"}т.е. вывести все опубликованные фото с именем галереи «gallery_1». Это для реализации нескольких слайдеров на одном ресурсе. Так вот по отдельности — условия работают и фильтруют, а вместе ничего не выводится. Использовал последнюю версию MIGXИ вот здесь Fi1osof также говорит, что условие только одно можно поставить
Однако, могу предположить, что можно через сниппет:
<?php $json = array(); $tvid = (int)$tvid; $tmp = explode(',',$input); foreach ($tmp as $tvs) { if ((int)$tvs > 0) { if ($tv = $modx->getObject('modTemplateVarResource', array('contentid' => (int)$tvs, 'tmplvarid' => $tvid))) { $tvj = json_decode($tv->get('value'),true); $json = array_merge($json,$tvj); } } } return json_encode($json);Вызываем getImageList с параметрами:В &input передаются ID ресурсов, с которых надо получить migx поля, &tvid — ID TV поля migx, &tpl — чанк для вывода результатов.
P.S.: результат не проверял.
А когда вызываю
показывает только из одного раздела.
for($i=0; $i<count($json); $i++) { $json[$i]['MIGX_id']=($i+1); }Таким образом я переназначил MIGX_id для общего списка, потому как из разных документов они повторялись.Проблема в том, что есть несколько ресурсов с сотрудниками.
Воспользовался примером вашего сниппета json_merge:
<?php $json = array(); $tvid = (int)$tvid; $tmp = explode(',',$input); foreach ($tmp as $tvs) { if ((int)$tvs > 0) { if ($tv = $modx->getObject('modTemplateVarResource', array('contentid' => (int)$tvs, 'tmplvarid' => $tvid))) { $tvj = json_decode($tv->get('value'),true); $json = array_merge($json,$tvj); } } } for($i=0; $i<count($json); $i++) { $json[$i]['MIGX_id']=($i+1); } return json_encode($json);Вывожу так:Проблема в том, что вывод «склеивает» всё в один раздел. Т.е. например 5 сотрудников из одного раздела выводятся корректно, а остальные «добавляются» к этому же разделу и не перекидывают на верный.
Пример
teamElementIndex:
$tvj = json_decode($tv->get('value'),true);добавить$tvj = json_decode($tv->get('value'),true); $tvj['contentid'] = $tvs;В чанке соответственно ссылка [[~[[+contentid]]]]Можете чуть подробнее описать что нужно сделать?
типа так
Слишком мало данных, нужно подробнее описать (название ТВ с migx, вкладки формы, чанк с выводом).
Создал шаблон, в нем лого выводятся в виде списка внутри тега
.
Разметка в шаблоне такая:
<section data-js-module="filtering-demo" class="big-demo go-wide"> <div class="container"> <div class="filter-button-group button-group js-radio-button-group"> </div> <ul class="grid da-thumbs woocommerce columns-4"> [[getImageList? &tvname=`image,partners` &tpl=`partnerTpl` &limit=`5` &docid=`[[*id]]` ]] </ul> [[*content]] </div> </section>Само TV, подключаемое к шаблону с типом migxВкладки:[ {"caption":"Info", "fields": [ {"field":"image","caption":"Image","inputTVtype":"image"} ]} ]Разметка колонок:[ {"header": "Image", "width": "300", "sortable": "false", "dataIndex": "image","renderer": "this.renderImage"} ]Чанк шаблона partnerTpl имеет вид:<li data-category="transition" class="element-item product-item-wrap"> <div class="hover-dir"> <figure><img src="[[+image]]" alt="logo1"/></figure> </div> </li>Уже что только не пробовал. Просто пустой вызов сниппета тоже ничего не выводит. Пробовал в шаблоне TV прописать partners и тоже ничего не вышло. А слайдер на главной выводится нормально.Попробовал вызов слайдера вставить на страницу с партнерами и тоже ноль. Не выводит даже массив.[[getImageList?
&docid=`1`
&tvname=`tv`
&tpl=`tpl`
&limit=`1`
]]
А в tpl, где id — 1:
{set $rows = json_decode(1 | resource: 'tv', true)}
{foreach $rows as $idx => $row first=$first}
{if $first}
{/if}
{/foreach}
не могу вывести значения из вложенного MIGX поля, хотя при вызове имени плейсхолдера с самим MIGX показывает json объект. Помогите пожалуйста в нелегком деле
Вот html код слайдера:
Мучаюсь несколько дней
<div class="card-columns"> [[!getImageList? &tvname=`myMIGXtv` &tpl=`one_news`]] </div>сам чанк one_news<div class="card"> <img class="card-img-top" src="[[+image_news]]" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">[[+tile_news]]</h5> <p class="card-text">[[+desc_news]]</p> <a href="#" class="btn more p-0 mt-3" data-toggle="modal" data-target="#exampleModal">Read More</a> <!-- Modal --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">[[+tile_news]]</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <img class="card-img-top" src="/assets/images/g9.jpg" alt="Card image cap"> <p class="my-3">[[+full_desc_news]]</p> </div> </div> </div> </div> <!-- /Modal --> </div> </div>В чем может быть ошибка? не добавляет новостьЧто означает &tvname и какие бывают значения?
{$_modx->runSnippet('!getImageList', [ 'tvname' => 'main_banners', 'tpl' => '@FILE: chunks/main_banner.tpl' ])}Чанк лежит в /core/elements/template/chunks, но при выводе возвращает массив параметров. В чем может быть проблема?{$_modx->runSnippet('!getImageList', [ 'tvname' => 'main_banners', 'tpl' => '@FILE:core/elements/template/chunks/main_banner.tpl' ])}Вызов делаю вот такой конструкцией
[[!getImageList? &docid=`[[+id]]` &tvname=`priceList` &tpl=`row-item-price` &sort=`[{"sortby":"menuindex"}]` ]]P.S. menuindex и idx не работают…&sort=`[{"sortby":"menuindex"}]`[{"sortby":"+idx"}]то есть вот такили вот так
то тоже работает
Написала вам, потом добавила сортировку и теперь выводит 4 записи)