Последние темы


Сниппет для получения id родителей

  • Вообще не понятно, что вы пытаетесь сделать

    Посмотрите: Раз и Два

  • @slaad Ну грубо говоря мне нужно получить id родителей ресурсов, у которых шаблон 5 и значение ТВ поля совпадает с pagetitle текущей страницы (тв имеет множественный выбор, т.е. там через разделитель || указаны несколько pagetitle)

  • @tsergey

    Что-то такое можно попробовать:

    
    $pagetitle = 'Машинка'; //значение ТВшки, которое ищем
    $TV_ID=6;//id твшки, которую провереяем на соответствие $pagetitle
    
       $q = $modx->newQuery('modResource');
       $q->innerJoin('modTemplateVarResource', 'tv', array('modResource.id = tv.contentid', 'tv.tmplvarid = ' . $TV_ID));
       $q->select(array('modResource.id'));
       $q->where(array('tv.value'=>
               $pagetitle
               ));
       
       if ($q->prepare() && $q->stmt->execute()){
           $results = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
                    $ids_array=array();
               foreach($results as $result){
                       $ids_array[]=$result['resource_id']; 
                       
                   }
       }
      print_r ($ids_array); //для консоли
      //return $ids_array; //для работы
    
  • @slaad Спасибо что откликнулись.
    В консоле при проверке на выходе получаю Array ()

  • @tsergey Вы точно корректно заполнили
    $pagetitle и $TV_ID?

    Все должно работать, там только на $result['id']; надо поправить и все

    $pagetitle = 'Состав:'; //значение ТВшки, которое ищем
    $TV_ID=4;//id твшки, которую провереяем на соответствие $pagetitle
    
       $q = $modx->newQuery('modResource');
       $q->innerJoin('modTemplateVarResource', 'tv', array('modResource.id = tv.contentid', 'tv.tmplvarid = ' . $TV_ID));
       $q->select(array('modResource.id'));
       $q->where(array('tv.value'=>
               $pagetitle
               ));
       
       if ($q->prepare() && $q->stmt->execute()){
           $results = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
                    $ids_array=array();
               foreach($results as $result){
                       $ids_array[]=$result['id']; 
                       
                   }
       }
      print_r ($ids_array); //для консоли
    
  • @slaad Да так заработало.
    Буду теперь думать как получить id родителей этих товаров, и на выводе ограничить, что эти родители являются детьми введенного id.
    Если конечно не сложно не откажусь от помощи, или в какую сторону копать?

  • @tsergey
    Я же вам даже две базы склеил теперь должны были разобраться, ну покрутите запрос.

    Вам нужно копать в сторону $q->select - это поля которые вы из базы тащите и $q->where - это какие фильтры наклаываете.
    в $q->select добавьте modResource.parent
    в $q->where modResource.parent = > ...; ( указать id)

    И да, на выходе у вас будет многомерный массив, поэтому сначала выведите print_r ($results), прежде чем обрабатывать его, чтобы вы поняли , что вам делать.

  • @slaad Спасибо, покрутим, подумаем. Для предыдущего запроса я вот так сделал

    return implode(',',$ids_array); 
    

    Чтобы получить чисто id через запятую

  • Участник @slaad
    Заметил что если в ТВ товара указано не одно значение, а не сколько, то он не выбирается данным сниппетом

  • В общем имею след код

    <?php
    $pagetitle = 'F10/F11 2009>'; //значение ТВшки, которое ищем
    $TV_ID=6;//id твшки, которую провереяем на соответствие $pagetitle
    
       $q = $modx->newQuery('modResource');
       $q->innerJoin('modTemplateVarResource', 'tv', array('modResource.id = tv.contentid', 'tv.tmplvarid = ' . $TV_ID));
       $q->select(array('modResource.parent'));
       $q->where(array(
           'tv.value'=> $pagetitle
               ));
       
       if ($q->prepare() && $q->stmt->execute()){
           $results = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
                    $ids_array=array();
               foreach($results as $result){
                       $ids_array[]=$result['parent']; 
                       
                   }
       }
      return implode(',',$ids_array);
    

    но так как $TV_ID=6 имеет множественное значение, в выборку попадают только товары у которого этот ТВ имеет одно значение (если там указано несколько значений, то игнорируется)

    Вопрос в следующем, как сделать чтобы и с множественным значением попадали документы

 

Последние комментарии

  • Вот, может кому-то пригодиться. Скачиваем модуль с оф.сайта яндекс кассы. И в YandexMoneyHook,
    core/components/yandexmoney/model/yandexmoney.class.php и /assets/components/yandexmoney/connector_result.php подключаем пакет shopkeeper3 и выбор заказа по id.
    В общем меняем строки для shk2 на shk3.

    $modx->addPackage('shopkeeper', $modx->getOption('core_path').'components/shopkeeper/model/'); $order = $modx->getObject('SHKorder', $order_id) на $modx->addPackage('shopkeeper3', $modx->getOption('core_path').'components/shopkeeper3/model/'); $order = $modx->getObject('shk_order', $order_id);

    Так же, если не меняли стандартные статусы заказа, то в модули их исчисление начинается с 0, в shk3 с 1. Надо учесть это при обновлении статуса при оплате. (я тупо в БД в таблице с параметрами сниппета YandexMoney поменял нумерацию)

    Читать далее
  • Z

    Спасибо, буду пробовать.

    Читать далее
  • Может такая причина
    http://forum.modx-shopkeeper.ru/topic/717/mysql-5-7-не-работает-query-groupby/4

    Смотрите в журнал ошибок.

    Надо выполнить запрос

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

    Читать далее
  • Z

    Добрый день! Используется шаблон с id 3. Вот скриншот: http://dl3.joxi.net/drive/2018/11/17/0003/2897/236369/69/3dd12003a9.png

    Читать далее