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


Сниппет для получения 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 имеет множественное значение, в выборку попадают только товары у которого этот ТВ имеет одно значение (если там указано несколько значений, то игнорируется)

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

 

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

  • C

    Если вдруг кто-то озадачится.
    В файле updateorderstatus.class.php

    //Формируем письмо $orderOutputData = $shopCart->getOrderData( $order_id ); $chunkArr = array( 'orderID' => $order_data['id'], 'orderDate' => $order_data['date'], 'statusName' => $status_data['label'], 'orderCurrency' => $shopCart->config['currency'], 'orderOutputData' => $orderOutputData, //добавляем строку 'status' => $status_data['color'], );

    Читать далее
  • Участник @Vladislava написал в Проблема с giftCards:

    @Andchir Спасибо большое! А не скажете ещё, где можно скачать Compare? Тоже не могу найти.

    Сравнение товаров
    https://e-store.shopkerx.net/katalog/modx_extras/compare

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

    @Andchir Спасибо большое! А не скажете ещё, где можно скачать Compare? Тоже не могу найти.

    Читать далее
  • Дополнение "Paykeeper2 - онлайн-оплата и электронные товары" теперь стало бесплатным.

    0_1574706584028_Chash Register.png

    Сниппет для продажи электронных товаров, а так же оплаты заказов в интернет-магазине на основе Shopkeeper 3.x.
    Компонент для управления электронными товарами (Фронт-енд написан на Angular2 + TypeScript).
    Используется библиотека Omnipay. Эта библиотека позволяет делать единый API для разных платежных систем.
    Сайт проекта: http://omnipay.thephpleague.com/

    В состав входят готовые обработчики для платежных систем:
    Yandex.Kassa (агрегатор), WebMoney, PayPal.

    Скачать можно здесь:
    https://e-store.shopkerx.net/katalog/modx_extras/onlayn-oplata-dlya-modx-paykeeper2

    Читать далее