Стас Далинин 02 ноября 2014 0 0
Здравствуйте, помогите пожалуйста! На сайте реализовываю сопутствующий товар.



Делаю это при помощи статьи, но не могу понять как должен выглядеть в шаблоне блок с поиском дополнительных товаров.
Не могли бы вы подробнее расписать как происходит преобразование данных, и выборка из базы?
0 комментариев
Tramp13571
Tramp1357 02 ноября 2014г в 18:03 #
Когда заданы сопутствующие товары, их 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}
Fi1osof1
Fi1osof 02 ноября 2014г в 18:51 #
Все так.
С
Стас Далинин 04 ноября 2014г в 01:02 #
А что именно делает :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"}
Fi1osof1
Fi1osof 04 ноября 2014г в 02:02 #
Если вы решили все-таки заниматься сборкой 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)}

Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.