Синтаксис Fenom и экранирование ковычек

Всем привет! Уже 2 дня не могу понять, почему феном выдает двойную кавычку, вместо одинарной и закрывает мне весь вызов.

Вот кусок кода:
<div class="popup_scrollbar">

	{var $frame_tpl} {ignore}
	<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet('!msop2GetOptionsWithPrices', ['id ' => $id,'key ' => 'size ','price '=> ($id | resource : 'price ')]) | toJSON} ">
			<div class="_img"><img src="{$_pls['280x280 ']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
			<div class="_title">{$pagetitle}</div>
			<div class="_title" style="font-size: 70%;font-style: italic;">Ширина: {$longtitle} см.</div>
			<div class="_details">
				<div class="_price"><span class="_price_num">{($id | resource : 'price ')}</span> {'ms2_frontend_currency ' | lexicon}</div>
				<div class="_select text-right">+</div>
				<div class="clear"></div>
			</div>
		</div>
		{/ignore}
		{/var}

		{var $frames = $_modx->runSnippet('msProducts ', [
			'parents ' => 38,
			'sortby ' => 'price ',
			'sortdir ' => 'ASC ',
			'includeThumbs ' => '280x280 ',
			'tpl ' => '@INLINE '~$frame_tpl,
			'tpl_n3 ' => '@INLINE '~$frame_tpl~'<div class="clear"></div>', ])} {$frames}

</div>
В итоге на фронте, как HTML он выводится вот так:
<div class="popup_scrollbar">

                                  
<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' => 'size ',
		'price ' => ($id | resource : 'price '),
	]) | toJSON}'>
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>


<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' => 'size ',
		'price ' => ($id | resource : 'price '),
	]) | toJSON}'>
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>


<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' => 'size ',
		'price ' => ($id | resource : 'price '),
	]) | toJSON}'>
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>
 
<div class="clear"></div>

<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' => 'size ',
		'price ' => ($id | resource : 'price '),
	]) | toJSON}'>
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>

</div>
То есть, тег закрывается намного раньше, но в ресурсе у меня нет там двойной кавычки, она одинарная)

Помогите пожалуйста разобраться, могу скинуть весь код.
Василий Перчиков
26 сентября 2018, 22:11
modx.pro
1
1 940
0

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

Сергей Шлоков
28 сентября 2018, 09:01
+1
Мама родная!
Во-первых, тег ignore вырезает содержимое и добавляет его уже после парсинга перед выводом в браузер. Иначе из-за специфики парсинга MODX он не работает.
Во-вторых, кавычки добавляет браузер при рендеринге страницы.Пытается привести к корректному виду то, что ему подсунули.

Как минимум, нужно вынести шаблон $frame_tpl в чанк (обычный или файловый). pdoTools кэширует шаблоны для цикла. Так что лишних запросов не будет. Ну и код этого шаблона требует большой оптимизации. Для каждого продукта выполняется такой код
{$_modx->runSnippet('!msop2GetOptionsWithPrices', ['id ' => $id,'key ' => 'size ','price '=> ($id | resource : 'price ')]) | toJSON}
Пожалейте пользователя и парсер. На каждой итерации выполнять такое — это явно попахивает местью заказчику.
А вот это
($id | resource : 'price ')
нельзя заменить на $price?
    Василий Перчиков
    28 сентября 2018, 11:44
    0
    В ignore добавлены инлайновые чанки.
    Всё работало до того, как обновил MODx до версии 2.6.5
    Могло что-то измениться в синтаксисе Fenom, при обновлении версии?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
3