Вывод тегов товара

Привет.

Хочу на странице с товаром вывести все теги товара. Так, что бы по клику на тег получать все товары с этим тегом. В общем обычный функционал.
Попытался сделать вот так:
[[!tagLister? &tv=`ms_tags` ]]
Вроде как tagLister должен обрабатывать tv-параметры. Но тут он не работает… Можно конечно создать еще один tv, и писать теги товара в нем. Но не хочется лишнее поле делать.

Подскажите, правильно ли я вообще делаю? Или подскажите, может есть готовые сниппеты для задуманного. Программист из меня некудышний, а разобраться хочется)
Спасибо!
Андрей Сухомозгий
30 июня 2014, 17:42
modx.pro
2
5 307
0

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

Сергей
01 июля 2014, 07:15
0
Ну тэги в miniShop2 не tv-поля, потому и не работает.
Вывести их ссылками можно через msOptions, например так:
[[!msOptions?name=`tags`&tplOuter=`@INLINE <p><strong>Tags:</strong> [[+rows]]</p>`&tplRow=`@INLINE <a href="search.html?tag=[[+value]]">[[+value]]</a> `]]
А вот как сделать так, чтобы товары выводились, то тут уже надо думать. Я сделал это довольно криво через модификацию сниппита msProducts, что конечно не лучший вариант, но лучше пока не придумал. Можно еще для вывода использовать mSearch2, точнее mFilter2.
    Павел Пустота
    03 июля 2014, 01:05
    0
    Вот здесь можно поглядеть:
    bezumkin.ru/modx/minishop2/solutions/1160/
    Сниппет — «Выбор товаров по опциям»
    Ссылки у вас снабжены get-параметрами. Берём оттуда значение и «суём» в этот сниппет.
      Павел Пустота
      03 июля 2014, 01:08
      0
      Буквально у этого сниппета 4-ю строку поменять на $param1 = $_GET['tag'];
      А сам сниппет соответственно должен быть на этой странице — search.html
        Андрей Сухомозгий
        04 июля 2014, 23:28
        0
        а вот такой еще вопрос: я в результате этих манипуляций получил просто список айдишников товаров… как бы мне их оформить нормально. Так, как они в каталоге выводятся… Подскажите…
          Павел Пустота
          05 июля 2014, 00:10
          0
          Простой способ вставить результат в pdoResources:
          [[pdoResources?
              &parents=`1`
              &resources=`[[!ТВОЙСНИППЕТ]]`
          ]]
          Заменив в сниппете print_r($result) на echo $result

          Правильный способ в твоём сниппете сделать вместо print_r($result):
          $modx->runsnippet('pdoResources', array('parents'=>1,'resources'=>$result));
            Андрей Сухомозгий
            05 июля 2014, 00:22
            0
            ничего не выводит, к сожалению…
              Андрей Сухомозгий
              05 июля 2014, 00:24
              0
              сделал «правильным» способом… вызвал тот же сниппет на странице, поменял у него последнюю строку на правильную и ничего
                Павел Пустота
                05 июля 2014, 00:43
                0
                Пришли код сниппета. Чудес же не бывает. Если сниппет возвращал список idшников, то значит вызываешь pdoResources не правильно. У меня в примере оочень примерный вызов. Его нужно переделать под твою ситуацию.
                  Андрей Сухомозгий
                  05 июля 2014, 01:22
                  0
                  Это сниппет msTags:
                  <?php
                  $key = 'tags'; // имя опции товара
                  $category = 0; // фильтрация по категории
                  $param1 = $_GET['tag'];
                  
                  $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'])) ;
                  
                  }
                  $modx->runsnippet('pdoResources', array('parents'=>3,'resources'=>$result));
                  На принимающей странице вот это:
                  [[msTags?]]

                  А get параметр передается вот так:
                  [[!msOptions?name=`tags`&tplOuter=`@INLINE <p><strong>Tags:</strong> [[+rows]]</p>`&tplRow=`@INLINE <a href="tags?tag=[[+value]]">[[+value]]</a> `]]
                    Павел Пустота
                    05 июля 2014, 12:00
                    0
                    У тебя же минишоп? Зачем ты повторяешь за мной про pdoResources??))
                    Так пробовал?
                    [[!msProducts?
                        &parents=`3`
                        &resources=`[[!ТВОЙСНИППЕТ]]`
                        &showLog=`1`
                    ]]
                    Ну или так:
                    $modx->runsnippet('msProducts', array('parents'=>3,'resources'=>$result,'showLog'=>1));
                    Что выводит в логе? Точно у предка этих ресурсов id3?
                    Опубликованны ли они? Может &showUnpublished нужно поставить 1?
          Андрей Сухомозгий
          03 июля 2014, 08:58
          0
          спасибо за совет. попробую так сделать…
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11