К содержанию

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

Привет.

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

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

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

Сергей
Сергей Старожил
01 июля 2014, 07:15
Ну тэги в 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
    Вот здесь можно поглядеть:
    bezumkin.ru/modx/minishop2/solutions/1160/
    Сниппет — «Выбор товаров по опциям»
    Ссылки у вас снабжены get-параметрами. Берём оттуда значение и «суём» в этот сниппет.
      Павел Пустота
      Павел Пустота Проверенный
      03 июля 2014, 01:08
      Буквально у этого сниппета 4-ю строку поменять на $param1 = $_GET['tag'];
      А сам сниппет соответственно должен быть на этой странице — search.html
        Андрей Сухомозгий
        Андрей Сухомозгий Проверенный
        04 июля 2014, 23:28
        а вот такой еще вопрос: я в результате этих манипуляций получил просто список айдишников товаров… как бы мне их оформить нормально. Так, как они в каталоге выводятся… Подскажите…
          Павел Пустота
          Павел Пустота Проверенный
          05 июля 2014, 00:10
          Простой способ вставить результат в 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
            ничего не выводит, к сожалению…
              Андрей Сухомозгий
              Андрей Сухомозгий Проверенный
              05 июля 2014, 00:24
              сделал «правильным» способом… вызвал тот же сниппет на странице, поменял у него последнюю строку на правильную и ничего
                Павел Пустота
                Павел Пустота Проверенный
                05 июля 2014, 00:43
                Пришли код сниппета. Чудес же не бывает. Если сниппет возвращал список idшников, то значит вызываешь pdoResources не правильно. У меня в примере оочень примерный вызов. Его нужно переделать под твою ситуацию.
                  Андрей Сухомозгий
                  Андрей Сухомозгий Проверенный
                  05 июля 2014, 01:22
                  Это сниппет 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
                    У тебя же минишоп? Зачем ты повторяешь за мной про pdoResources??))
                    Так пробовал?
                    [[!msProducts?
                        &parents=`3`
                        &resources=`[[!ТВОЙСНИППЕТ]]`
                        &showLog=`1`
                    ]]
                    Ну или так:
                    $modx->runsnippet('msProducts', array('parents'=>3,'resources'=>$result,'showLog'=>1));
                    Что выводит в логе? Точно у предка этих ресурсов id3?
                    Опубликованны ли они? Может &showUnpublished нужно поставить 1?
          Андрей Сухомозгий
          Андрей Сухомозгий Проверенный
          03 июля 2014, 08:58
          спасибо за совет. попробую так сделать…
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11