Не отрабатывает @INLINE в tplWrapper (Fenom)

Доброго дня!

Помогите с синтаксисом '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
	    ]}
tplWrapperProducts:

<div class="container">
        <h3>{$block_title}</h3>
	<div>
                {$output}
        </div>
</div>
Помогите, пожалуйста, написать шаблон в одну строку. Что-то не то с этим $output.
Мартин Очоа
03 апреля 2019, 17:33
modx.pro
1 148
0

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

Мартин Очоа
03 апреля 2019, 19:57
0
Методом проб и ошибок разобрался. Может кому поможет — нужно писать так:

'tplWrapper' => '@INLINE ' ~ $block_title ~ '{$output}'
Переменные, которые нужно чтобы обработались выносить в ~ ~, а output, видимо, экранируется в {}
    Баха Волков
    04 апреля 2019, 09:10
    +1
    Уже несколько раз вижу такую конструкцию, вот эта конкатенация бессмысленная:

    'resources' => '-' ~ $_modx->resource.id,

    можно писать проще:

    'resources' => -$_modx->resource.id,

    Переменные, которые нужно чтобы обработались выносить в ~ ~
    Это не выносить, а знак тильда которая в fenom является оператором присвоения. Мы же не говорим, что в JS нужно выносить в + + или в php нужно выносить в . .

    а output, видимо, экранируется в {}
    Не экранируется, а вы просто указываете плейсхолдер, а не содержимое плейсхолдера/переменной. В заметке вы пытались каким-то образом в чанке получить содержимое плейсхолдера/переменной которая будет известна только после того как сниппет отработает, а потом "Методом проб и ошибок" сделали правильно, т.е. указали плейсхолдер.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2