Как сделать в сниппете выборку товаров minishop2 по дополнительному полю или опции и вывести их в чанк?

Добрый день. Помогите третий день мучаюсь. Как получить в сниппете товары minishop2 по дополнительному полю или опции и вывести их в чанк?
Вадим
09 января 2021, 01:15
modx.pro
683
0

Комментарии: 5

Евгений Webinmd
09 января 2021, 01:21
0
1) Покажите ваш код, который надо доработать
2) msProducts не подходит под вашу задачу?
    Вадим
    09 января 2021, 01:37
    0
    <?php
    $key = 'TIP_COPUS'; // имя опции товара
    $category = 0; // фильтрация по категории
    $param1 = $_GET['corpus'];
    
    $q = $modx->newQuery('msProductOption');
    $q->innerJoin('msProduct', 'msProduct', 'msProduct.id=msProductOption.product_id');
    $q->where(array('msProductOption.key' => $key, 'msProductOption.value'=> $param1));
    $q->sortby('msProductOption.value','ASC');
    $q->select('DISTINCT(msProductOption.value), msProduct.id');
    $q->where(array('msProductOption.key' => $key));
    if (!empty($category)) {
        $ids = $modx->getChildIds($category);
        $ids[] = $category;
        $q->innerJoin('msCategory', 'msCategory', 'msCategory.id=msProduct.parent');
        $q->where(array('msCategory.id:IN' => $ids));
    }
    $result = array();
    if ($q->prepare() && $q->stmt->execute()) {
        while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
            $res['id'][] = $row['id'];
        }
        $result = implode(",", array_unique($res['id'])) ;
    
    }
    $output=' ';
    $products= $modx->getCollection('msProduct', $result);
     
    foreach ($products as $k => $product) { 
        $title = $product->get('pagetitle');
    }
    $output = $modx->getChunk('ProductPodbor', title));
    return $output;
      Евгений Webinmd
      09 января 2021, 01:43
      0
      чет у вас нет немного понимания как работает getChunk.
      по мне так проще msProducts

      [[!msProducts?
          // тут все ваши параметры, включая parent/tpl 
          &optionFilters=`{ "TIP_COPUS":"[[#GET.corpus]]" }`
      ]]
      пример на феном не привожу, а то непонятно что у вас там настроено
        Вадим
        09 января 2021, 01:49
        0
        Спасибо за ответ, я думал об этом, но никак не могу понять, как мне пердать в сниппет get. Есть у меня побор на jquery, обработчик на php, и вот как этот последний запрос отправить в сниппет, который вызывается ну допустим в popup окне. Если откроете глаза, буду благодарен
    Вадим
    11 января 2021, 13:34
    0
    Да что я делаю не так? Не могу понять. Вот сниппет:
    <?php
    $string=null;
    if($_POST['id']){
        $string.='tip_korpus=='.$_POST['id'].'';
    }
    
    $string=substr($string,0,-1);
    echo $string;
    Вот код со страницы к которой я обращаюсь по ajax
    [[!msProducts?
                &tpl=`msProduct`
                &limit=`12`
                &includeTVs=`crop, tip_korpus`
                &includeThumbs=`740x560,740x`
                &parents=`0`
                &depth=`0`
                &tvFilters=`[[!GetAjax?id='key']]`
            ]]
    Ничего не выводит, если просто оставить:
    [[!GetAjax?id='key']]
    , то значение есть
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5