Не отрабатывает @INLINE в tplWrapper (Fenom)
Доброго дня!
Помогите с синтаксисом 'tplWrapper' => '@INLINE… на Fenom.
Стоит задача не выводить блок «похожие товары», если этих товаров нет.
На стр. товара такой чанк:
и т.д.
Если в tplWrapper указывать внешний чанк-шаблон tplWrapperProducts, то ресурсы выводятся — все ок — но не показывается в tplWrapperProducts переменная {$block_title} (оно и понятно, её нужно туда передать).
tplWrapperProducts:
Помогите с синтаксисом 'tplWrapper' => '@INLINE… на Fenom.
Стоит задача не выводить блок «похожие товары», если этих товаров нет.
На стр. товара такой чанк:
{'ch_products_carousel' | chunk : [
'parent_id' => '1',
'block_title' => $block_title,
'limit' => 12
]}
Пытаюсь в ch_products_carousel указать шаблон обёртки tplWrapper в одну строку, чтобы использовать передаваемый в чанк параметр $block_title:{'!msProducts' | snippet : [
'parents' => $parent_id,
'tpl' => 'tpl.msProducts.row2',
'limit' => $limit,
'resources' => '-' ~ $_modx->resource.id,
'includeThumbs' => '250x250',
'optionFilters' => json_encode([
'kolichestvo:=' => '25'
]),
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'tplWrapper' => '@INLINE <h3>' ~ $block_title ~ '</h3>' ~ $output,
'wrapIfEmpty' => 0
]}
В результате на сайте выводится:Array ( [output] => <div class="col-xs-6 col-sm-4 ms2_product product"> <div class="productInner"> <a href="product/123"> <span class="flag"> </span> <img class="img-responsive" src="/assets/images/products/1999/250x250/25.jpeg" alt="
и т.д.
Если в tplWrapper указывать внешний чанк-шаблон tplWrapperProducts, то ресурсы выводятся — все ок — но не показывается в tplWrapperProducts переменная {$block_title} (оно и понятно, её нужно туда передать).
{'!msProducts' | snippet : [
'parents' => $parent_id,
'tpl' => 'tpl.msProducts.row2',
'limit' => $limit,
'resources' => '-' ~ $_modx->resource.id,
'includeThumbs' => '250x250',
'optionFilters' => json_encode([
'kolichestvo:=' => '25'
]),
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'tplWrapper' => 'tplWrapperProducts',
'wrapIfEmpty' => 0
]}
<div class="container">
<h3>{$block_title}</h3>
<div>
{$output}
</div>
</div>
Помогите, пожалуйста, написать шаблон в одну строку. Что-то не то с этим $output.Комментарии: 2
Методом проб и ошибок разобрался. Может кому поможет — нужно писать так:
'tplWrapper' => '@INLINE ' ~ $block_title ~ '{$output}'
Переменные, которые нужно чтобы обработались выносить в ~ ~, а output, видимо, экранируется в {}
Уже несколько раз вижу такую конструкцию, вот эта конкатенация бессмысленная:
можно писать проще:
'resources' => '-' ~ $_modx->resource.id,
можно писать проще:
'resources' => -$_modx->resource.id,
Переменные, которые нужно чтобы обработались выносить в ~ ~Это не выносить, а знак тильда которая в fenom является оператором присвоения. Мы же не говорим, что в JS нужно выносить в + + или в php нужно выносить в . .
а output, видимо, экранируется в {}Не экранируется, а вы просто указываете плейсхолдер, а не содержимое плейсхолдера/переменной. В заметке вы пытались каким-то образом в чанке получить содержимое плейсхолдера/переменной которая будет известна только после того как сниппет отработает, а потом "Методом проб и ошибок" сделали правильно, т.е. указали плейсхолдер.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.