nirfrost 11 января 2014 1 11
сообственно пытаюсь сделать выборку в 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"}
11 комментариев
Fi1osof1
Fi1osof 11 января 2014г в 00:50 #
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
Такого параметра в процессоре нет.
n
nirfrost 11 января 2014г в 01:17 #
простите но все таки не понял — как записать то верно?
мне надо выбрать все товары из дочерних от 85 категории
Fi1osof1
Fi1osof 11 января 2014г в 01:29 #
{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}
o
ollserg 12 сентября 2014г в 11:36 #
День добрый.
Мне нужно на странице товара в блоке вывести 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
Fi1osof1
Fi1osof 12 сентября 2014г в 16:37 #
Добрый день.

Во-первых, дайте листинг шаблона 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 = [.......
o
ollserg 12 сентября 2014г в 16:54 #
Спасибо за ответ
Вот листинг шаблона. 4 возможнвх сопутствующих товара. Название, цена и checkbox для выбора-добавления и снятия с корзины (набросок, еще нужно дописать)
<td><a href="{$object.uri}" title="{$object.pagetitle}">{$object.pagetitle}</a></td> 
        {$object.sm_price|number_format:0:".":" "} руб.  

Да с синтаксисом у меня точно проблемы, книжки нет и практики в PHP мало. Что почитать?
А как можно реализовать checkbox для товара, чтоб 2 клика добавить и удалить из корзины?
Fi1osof1
Fi1osof 12 сентября 2014г в 17:02 #
У вас в этом шаблоне нет перебора 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. Мы не учим под него специалистов с нуля. Он рассчитан на более менее опытных программистов.
o
ollserg 12 сентября 2014г в 18:44 #
Спасибо, этот код сработал.
Буду работать над ошибками и искать инфу.
ShopModxBox занимаюсь меньше месяца, разбираюсь. Поставил себе конкретную задачу, чтобы полный проект, а не тезисы-вершки. Да сложно, ну и что, а вам с чем-то новым всегда легко? Не брошу, т.к. упёртый. Очень редко прошу подсказку, привык сам разбираться, но тут да сложно, связка - PHP, процессоры и Smarty. Не ответите может когда то значит так и надо.
Ещё раз благодалю! Помогли!
Fi1osof1
Fi1osof 12 сентября 2014г в 20:30 #
Пожалуйста. И успехов!
Д
Дмитрий Высоцкий 26 мая 2016г в 01:54 #
Здравствуйте, подскажите, почему у меня выводятся только товары категории, а из подкатегорий нет?
Fi1osof1
Fi1osof 26 мая 2016г в 12:14 #
Может у вас указан параметр parent, а не category_id?
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.