PdoMenu и Tv
Здравствуйте, помогите сделать такую штуку.
В меню выводятся категории, у категорий есть TV — sale, если значение TV=1, то выводится рядом картинка prntscr.com/9f6sn4.
Вывод меню:
В меню выводятся категории, у категорий есть 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 (значению по дефолту). Как правильно написать сниппет? Комментарии: 4
да тут как бы 2 варианта:
1) Fenom (вроде правильно написал)
2) вынести tpl в чанк, потому что в inline не работают конструкции типа :default
tpl.menuRow
А ну и вариант со своим сниппетом.
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>
А ну и вариант со своим сниппетом.
Создаете ТВ чекбокс (флажок, я назвал его sale), пишите:
Вызов pdoMenu (стандартный вызов с bootstrap'ом):
Смысл в том, чтобы в нужной категории поставить галочку на «Распродажа» и таким образом выводить картинку в меню, которая показывает юзеру, что мол тут дешево.
Попробуйте.
Возможные значения:
Ваш текст==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, например. Смысл в том, чтобы в нужной категории поставить галочку на «Распродажа» и таким образом выводить картинку в меню, которая показывает юзеру, что мол тут дешево.
Попробуйте.
Да, спасибо) Почитал немного и именно так и реализовал)
В сниппете ошибка в получении переменной. Вы берете этот параметр из ресурса, на котором размещен вывод меню (сниппет 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 '';
}
но более оптимизированным будет считаться вариант с феном
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.