Выполнить сниппет из сниппета
Доброго всем времени!
Для магазина делаю некоторую доработку, сейчас думаю как можно элегантно решить следующую задачу- есть некий php скрипт, который отрабатывает на ajax запросы.
Скрипт в итоге формирует следующее:
результат записываем как json.
Все круто, все работает, снипет выводит положенные ему данные.
НО, в одном из чанков который отрабатывается есть еще один вложенный снипет такого формата
т.е во фронте видно вот что
Ну собственно решение которое мне приходит в голову -не красивое -тупо пропарсить $out_html, и там где вызов снипета вставить заранее подготовленный вызов этого сниппета, который я могу вызвать в этом же чанке…
Есть ли другие решения?
Благодарю за ответ =)
p.s магазине не на MS, к MS никакого отношения нет.
Для магазина делаю некоторую доработку, сейчас думаю как можно элегантно решить следующую задачу- есть некий php скрипт, который отрабатывает на ajax запросы.
Скрипт в итоге формирует следующее:
...
$out_html = $modx->runSnippet('getPage',$properties).'<div class="clear"></div>';
$output['prod_list'] = $out_html;
echo json_encode($output);
т.е берет параметры для снипета гетпейдж и его собственно вызывает.результат записываем как json.
Все круто, все работает, снипет выводит положенные ему данные.
НО, в одном из чанков который отрабатывается есть еще один вложенный снипет такого формата
[[!getImages?
&tvname=`shk.tovar.pics`
&tpl=`tpl.categoryTovarRow`
&docid=`[[+id]]`
&limit=`1`
&nullPath=`s`
&userDocPath=`/static/img/`
]]
ну и как можно догадаться, он возвращается как текст=)))т.е во фронте видно вот что
Ну собственно решение которое мне приходит в голову -не красивое -тупо пропарсить $out_html, и там где вызов снипета вставить заранее подготовленный вызов этого сниппета, который я могу вызвать в этом же чанке…
Есть ли другие решения?
Благодарю за ответ =)
p.s магазине не на MS, к MS никакого отношения нет.
Комментарии: 3
Да, нужно парсить самостоятельно.
$maxIterations= (integer) $modx->getOption('parser_max_iterations', null, 10);
$modx->getParser()->processElementTags('', $out_html, false, false, '[[', ']]', array(), $maxIterations);
$modx->getParser()->processElementTags('', $out_html, true, true, '[[', ']]', array(), $maxIterations);
Спасибо большое за ответ, сработало!
Притом вроде даже производительность не скушало сильно..=)
Притом вроде даже производительность не скушало сильно..=)
Это код из парсера MODX, поэтому разницы и не должно быть.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.