10 янв. 2014 г., 20:38

выборка shopmodx

сообственно пытаюсь сделать выборку в shopmodx из каталога самого с id 85 и что то ничего не выводит
{assign var=paramss value=[ "limit" => 100 ,"level" => 2 ,"where" => [ "parent" => 85 ] ]} {processor action="web/catalog/category/products/getdata" params=$paramss ns="modxsite" assign=result} {* Набиваем через единый шаблон листинга *} {include file="shop/catalog/list/fetch.tpl"}
1. web/catalog/category/products/getdata — это процессор, который ищет товары в текущей и во всех вложенных категориях. Там надо указывать category_id (в которой будут искаться товары), а не parent, так как при указании parent он должен бы найти товары с разделом-родителем id 85. У этого раздела просто нет дочерних документов вне дочерних категорий.
2. Выводите ошибки, то есть просто делайте в шаблоне так:
<pre> {print_r($result)} </pre>
$result — это если у вас в процессоре assign=result. Если набивается в другую переменную, само собой надо указывать другую переменную.
А лучше всего это делать в консоли. Там вы сразу увидите ошибки.
<?php $modx->startTime = $modx->getMicroTime(); print '<pre>'; ini_set('display_errors', 1); $modx->switchContext('web'); $modx->setLogLevel(3); $modx->setLogTarget('HTML'); $namespace = 'modxsite'; if(!$response = $modx->runProcessor('web/catalog/category/products/getdata', array(), array( 'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/', ))){ print "Не удалось выполнить процессор"; return; } $memory = round(memory_get_usage(true)/1024/1024, 4).' Mb'; print "<div>Memory: {$memory}</div>"; $totalTime= ($modx->getMicroTime() - $modx->startTime); $queryTime= $modx->queryTime; $queryTime= sprintf("%2.4f s", $queryTime); $queries= isset ($modx->executedQueries) ? $modx->executedQueries : 0; $totalTime= sprintf("%2.4f s", $totalTime); $phpTime= $totalTime - $queryTime; $phpTime= sprintf("%2.4f s", $phpTime); print "<div>TotalTime: {$totalTime}</div>"; print_r($response->getResponse());
А ошибка следующая:
Array ( [success] =>; [message] => Не была указана категория [total] => 0 [errors] => Array ( ) [object] => Array ( ) )
3. «level» => 2 Такого параметра в процессоре нет.
простите но все таки не понял — как записать то верно? мне надо выбрать все товары из дочерних от 85 категории
{assign var=paramss value=[ "limit" => 100 ,"category_id" => 85 ]} {processor action="web/catalog/category/products/getdata" params=$paramss ns="modxsite" assign=result}
Но если вам просто нужны все товары, то правильней просто получать товары, а не искать их в подкатегориях.
{assign var=paramss value=[ "limit" => 100 ]} {processor action="web/catalog/products/getdata" params=$paramss ns="modxsite" assign=result}
День добрый. Мне нужно на странице товара в блоке вывести 4 дочерних товара из 174 категории(это сопутствующие товары). Делаю это так: {assign var=paramss value=[ "limit" => 4 ,"category_id" => 174 ]} {processor action="web/catalog/category/products/getdata" params=$paramss ns="modxsite" assign=result} {include file="shop/products/list/packet.tpl"} В итоге получаю один и именно тот на странице которого нахожусь.
Если делаю так: {assign var=params value=[ "where"=>["174"=>$modx->resource->id] ,"current" => true ]} {processor action="web/catalog/products/getdata" ns="modxsite" params=$params assign=result} {if $result.success} {assign var=object value=$result.object} {include file="shop/products/list/packet.tpl"} {/if} То получаю только первый товар в категории 174
Добрый день.
Во-первых, дайте листинг шаблона shop/products/list/packet.tpl
{assign var=params value=[ "where"=>["174"=>$modx->resource->id] ,"current" => true ]}
Во-вторых, "current" => true - это влияет на то, что получить только один объект. Если у вас сопутствующие товары находятся непосредственно в категории 174, а не в каких-то вложенных категориях, то вы можете и использовать процессор web/catalog/category/products/getdata.
P.S. Не пишите {assign var=params value=[, это все пережитки прошлого. Пишите просто {$params = [.......
Спасибо за ответ Вот листинг шаблона. 4 возможнвх сопутствующих товара. Название, цена и checkbox для выбора-добавления и снятия с корзины (набросок, еще нужно дописать)
<td><a href="{$object.uri}" title="{$object.pagetitle}">{$object.pagetitle}</a></td> {$object.sm_price|number_format:0:".":" "} руб.
Да с синтаксисом у меня точно проблемы, книжки нет и практики в PHP мало. Что почитать? А как можно реализовать checkbox для товара, чтоб 2 клика добавить и удалить из корзины?
У вас в этом шаблоне нет перебора foreach, он в принципе не рассчитан на то, чтобы вывести несколько товаров. Пробуйте так:
{$paramss = [ "limit" => 4 ,"category_id" => 174 ]} {processor action="web/catalog/category/products/getdata" params=$paramss ns="modxsite" assign=result2} {foreach $result2.object as $object} {include file="shop/products/list/packet.tpl"} {/foreach}
В итоге получаю один и именно тот на странице которого нахожусь.
И сразу говорю, если для вас все это сложно, забросьте ShopModxBox. Мы не учим под него специалистов с нуля. Он рассчитан на более менее опытных программистов.
Спасибо, этот код сработал. Буду работать над ошибками и искать инфу. ShopModxBox занимаюсь меньше месяца, разбираюсь. Поставил себе конкретную задачу, чтобы полный проект, а не тезисы-вершки. Да сложно, ну и что, а вам с чем-то новым всегда легко? Не брошу, т.к. упёртый. Очень редко прошу подсказку, привык сам разбираться, но тут да сложно, связка - PHP, процессоры и Smarty. Не ответите может когда то значит так и надо. Ещё раз благодалю! Помогли!
Пожалуйста. И успехов!
Здравствуйте, подскажите, почему у меня выводятся только товары категории, а из подкатегорий нет?
Может у вас указан параметр parent, а не category_id?

Добавить комментарий