Здравствуйте, помогите пожалуйста! На сайте реализовываю сопутствующий товар. ? Делаю это при помощи статьи, но не могу понять как должен выглядеть в шаблоне блок с поиском дополнительных товаров. Не могли бы вы подробнее расписать как происходит преобразование данных, и выборка из базы?
Когда заданы сопутствующие товары, их ID хранятся в соответствующей переменной. Для их вывода необходимо:
{processor action='web/catalog/products/getdata' ns=modxsite params=$parrams assign=result} 3. обработать как при выводе товаров в категории: {foreach $result.object as $object}
...
{/foreach}
Все так.
А что именно делает :in запрос и что он может принимать в значение? И я не понимаю, как преобразовать строку в массив, что я должен для этого использовать ? Вот код который у меня должен выдавать я так понимаю сам себя (так, просто проверить) и он вообще ничего не выдаёт {assign var=params value=[
"limit" => 6,
"getPage" => 1,
"where" => [
"id:in" => "%{$object.id}%"
]
]}
{processor action="web/catalog/products/getdata" ns="modxsite" params=$params assign=result}
{include file="shop/catalog/list/fetch.tpl"}
Если вы решили все-таки заниматься сборкой ShopModxBox, то для начала изучите хотя бы основные типы данных (в частности строки, массивы и объекты), а так же методы explode() (формирование массива из строки) и implode() (обратно из массива в строку). Плюс к этой изучите хотя бы простейшие SQL-запросы. "%{$object.id}%" В SQL данная ковструкция - маска поиска по строке. То есть если $object.id имеет, к примеру, значение 110, то будет искать любую строку состоящую из 110 и любых других символов слева и справа от 110 (% - это любые символы. _ - любой один символ). Но операнд in требует перечисление (или массив). В вашем случае это "id:in" => [$object.id], или если поиск только по id, то "id" => $object.id В примере, который приводил Саша, $ids - это массив id-шников. {$params=['where'=>['id:in'=>$ids]]} 1. преобразовать строку вида '543||354||222||666' (именно так хранятся значения списка в TV) в массив (назовем его $ids) {$ids = (array)explode("||", $modx->resource->getTVValue($tv_id))}
{$params=[
'where'=>[
'id:in'=>$ids
]
]}
{processor action='web/catalog/products/getdata' ns=modxsite params=$params assign=result}
{print_r($result, 1)}