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