?
Делаю это при помощи статьи, но не могу понять как должен выглядеть в шаблоне блок с поиском дополнительных товаров.
Не могли бы вы подробнее расписать как происходит преобразование данных, и выборка из базы?
Когда заданы сопутствующие товары, их ID хранятся в соответствующей переменной. Для их вывода необходимо:
1. преобразовать строку вида '543||354||222||666' (именно так хранятся значения списка в TV) в массив (назовем его $ids)
2. вызвать процессор, который выберет нужные данные:
{$params=['where'=>['id:in'=>$ids]]} {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)}