pdoResources Fenom Where LIKE
Нужно вывести все ресурсы, у которых id содержится в доп. поле текущего ресурса. Без where выводятся все ресурсы. С where ничего не выводится.
Вывожу ресурсы через pdoResources на странице ресурса. В шаблоне прописано:
Пробовал:
{'!pdoResources' | snippet : [
'parents' => 1616,
'includeTVs' => 'inner-image,color',
'tplWrapper' => '@FILE chunks/offices_napravleniya_wrapper.tpl',
'tpl' => '@FILE chunks/offices_napravleniya_item.tpl',
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'where' => "[\"id LIKE '%"~$_modx->resource.officenapravleniya~"%'\"]"
]}
В БД у данного ресурса TV «officenapravleniya» такое значение 1621||1618||1617||1622Пробовал:
- 'where' => "[\«id LIKE '%»~$_modx->resource.officenapravleniya~"%'\"]"
- 'where' => '{«id:LIKE»: "%$_modx->resource.officenapravleniya%"}'
- 'where' => '{«id:LIKE»: "%'~$_modx->resource.officenapravleniya~'%"}'
- 'where' => 'id==%' ~ $_modx->resource.officenapravleniya~'%'
Поблагодарить автора
Отправить деньги
Комментарии: 14
'where' => [
'id:LIKE' => '%'~$_modx->resource.officenapravleniya~'%'
]
неа...((
А что показывает если просто $_modx->resource.officenapravleniya на странице вывести?
{set $ids = $_modx->resource.officenapravleniya | split : '||'}
'where' => [
'id:IN' => $ids
]
Можно еще добавить параметр 'showLog' => 1 и посмотреть в чем проблема
{$_modx->resource.officenapravleniya} выдаёт 1621161816171622
В настройках TV поставьте разделитель запятую например.
Там множественный выбор, если ставить запятую вместо || выдаёт только один вариант
@EVAL $output = $modx->runSnippet('pdoResources',array('parents'=> '1616', 'tpl'=>'@CODE:[[+pagetitle]]==[[+id]]', 'hideContainers'=>'1', 'outputSeparator'=>'||'));
return '' . $output;
Во вкладке Параметры вывода или как-то так называется, там можно указать разделитель.
LOG
Added where condition: id:IN(1621161816171622), modResource.parent:IN(1616,1617,1618,1619,1620,1621,1622), modResource.published=1, modResource.deleted=0
Added where condition: id:IN(1621161816171622), modResource.parent:IN(1616,1617,1618,1619,1620,1621,1622), modResource.published=1, modResource.deleted=0
Теперь {$_modx->resource.officenapravleniya} выдаёт 1618,1617,1621? но where не работает
а через
{set $ids = $_modx->resource.officenapravleniya | split : '||'}
'where' => [
'id:IN' => $ids
]
только первый ресурс из нужных
Сори)) {set $ids = $_modx->resource.officenapravleniya | split: ','} Заработало. Спасибо за помощь.
Здравствуйте! Не могли бы вы показать ваш вызов сниппета полностью? Сейчас бьюсь с этой же задачей, не могу добиться вывода ресурсов с множественным выводом.
Спасибо!
Спасибо!
Буду груб. Если Вы используете MODX, то изучите хотя бы базовые понятия работы с MySql. Как может придти в голову запрос поиска по id с LIKE? Я не говорю про тот же FIND_IN_SET. Не все знают про эту функцию. Но надо же знать, что id — это первичный индекс. По нему запрос с равенством и оператором IN отрабатывает мгновенно. А с LIKE Вы заставляете MySql бежать по всем строкам и проверять вхождение. А если строк будет сотни тысяч или миллион? Вроде же не новичок…
Можно так:
{set $material = $_modx->resource.project_material | split:'||'}
{foreach $material as $item}
{set $filter[] = 'project_material=='~$item}
{/foreach}
{'!pdoResources' | snippet : [
'parents' => 7,
'limit' => 2,
'tvPrefix' => '',
'tvFilters' => $filter,
'showLog' => 0,
'sortby' => 'RAND()',
'includeTVs' => 'project_image,project_price,project_area,project_material,project_size,project_bedrooms,project_bathrooms,location',
'tpl' => '@FILE chunks/projects/project.tpl',
]}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.