PdoMenu и Tv

Здравствуйте, помогите сделать такую штуку.
В меню выводятся категории, у категорий есть TV — sale, если значение TV=1, то выводится рядом картинка prntscr.com/9f6sn4.

Вывод меню:
[[pdoMenu?
					&startId=`2678`
	           			&level=`1`
                                        &includeTVs=`sale`
					&tpl=`@INLINE <li[[+classes]]><a  href="[[+link]]"  [[+attributes]]>[[+menutitle]][[isSale]]</a>[[+wrapper]]</li>`]]
Сниппет isSale:
$sale = $modx->resource->getTVValue('sale');
 if ($sale==1) {   
  return '<img src="/images/dif/flame-1.png" height="20">'; 
  }
else { 
     return '';
      }
Но значение ТВ, которое получает функция всегда равно 0 (значению по дефолту). Как правильно написать сниппет?
mekirile
17 декабря 2015, 09:14
modx.pro
2 972
0

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

Евгений Webinmd
17 декабря 2015, 12:29
+2
да тут как бы 2 варианта:

1) Fenom (вроде правильно написал)
[[pdoMenu?
&startId=`2678`
&level=`1`
&includeTVs=`sale`
&tpl=`@INLINE <li{{+classes}}><a  href="{{+link}}"  {{+attributes}}>{{+menutitle}}{{+tv.sale:default=`<img src="/images/dif/flame-1.png" height="20">`}}</a>{{+wrapper}}</li>`]]

2) вынести tpl в чанк, потому что в inline не работают конструкции типа :default

[[pdoMenu?
&startId=`2678`
&level=`1`
 &includeTVs=`sale`
&tpl=`tpl.menuRow`
]]


tpl.menuRow
<li[[+classes]]><a  href="[[+link]]"  [[+attributes]]>[[+menutitle]][[+tv.sale:default=`<img src="/images/dif/flame-1.png" height="20">`]]</a>[[+wrapper]]</li>

А ну и вариант со своим сниппетом.
    Илья
    18 декабря 2015, 00:56
    +2
    Создаете ТВ чекбокс (флажок, я назвал его sale), пишите:
    Возможные значения:
    Ваш текст==yes
    Делаете этот ТВ доступным для нужных шаблонов.

    Вызов pdoMenu (стандартный вызов с bootstrap'ом):
    [[pdoMenu?
    &startId=`0`
    &level=`2`
    &tplParentRow=`@INLINE
    <li class="[[+classnames]] dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" [[+attributes]]>[[+menutitle]][[*sale:eq=`yes`:then=`some cod here`]]<b class="caret"></b></a>
    <ul class="dropdown-menu">[[+wrapper]]</ul>
    </li>`
    &tplOuter=`@INLINE [[+wrapper]]`
    ]]
    То-есть мы просто подставляем [[*sale:eq=`yes`:then=`some cod here`]] в нужное место с нужным кодом, тегом img, например.
    Смысл в том, чтобы в нужной категории поставить галочку на «Распродажа» и таким образом выводить картинку в меню, которая показывает юзеру, что мол тут дешево.
    Попробуйте.
      mekirile
      18 декабря 2015, 09:35
      0
      Да, спасибо) Почитал немного и именно так и реализовал)
      Олег
      27 апреля 2017, 13:07
      0
      В сниппете ошибка в получении переменной. Вы берете этот параметр из ресурса, на котором размещен вывод меню (сниппет pdoMenu)правильно было бы в вашем случае передавать в сниппет переменную sale
      [[pdoMenu?
      					&startId=`2678`
      	           			&level=`1`
                                              &includeTVs=`sale`
      					&tpl=`@INLINE <li[[+classes]]><a  href="[[+link]]"  [[+attributes]]>[[+menutitle]][[isSale? &jopa=`[[+sale]]`]]</a>[[+wrapper]]</li>`]]
      Ну а в сниппете соответственно правильно лосить эту переменную
      $sale =(isset($jopa)?$jopa:0);
       if ($sale==1) {   
        return '<img src="/images/dif/flame-1.png" height="20">'; 
        }
      else { 
           return '';
            }
      но более оптимизированным будет считаться вариант с феном
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4