Выполнить сниппет из сниппета

Доброго всем времени!

Для магазина делаю некоторую доработку, сейчас думаю как можно элегантно решить следующую задачу- есть некий 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 никакого отношения нет.
Clean
26 апреля 2013, 21:23
modx.pro
2 210
0

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

Василий Наумкин
27 апреля 2013, 06:02
0
Да, нужно парсить самостоятельно.

$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);
    Clean
    27 апреля 2013, 09:45
    0
    Спасибо большое за ответ, сработало!
    Притом вроде даже производительность не скушало сильно..=)
      Василий Наумкин
      27 апреля 2013, 09:59
      0
      Это код из парсера MODX, поэтому разницы и не должно быть.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3