Здравствуйте. Помогите вывести страницу с примененным к ней шаблоном (не чанком!) из сниппета?
Ситуация такая: имеется шаблон (Template), который содержит в себе не всю страницу, а кусок кода - маленький блок без заголовков и т.п. Буду называть его "подшаблон" :)
Я создаю ресурс (страницу) и выбираю этот подшаблон в качестве шаблона. На этот ресурс не нужно попадать из адресной строки.
В основном шаблоне (страница-родитель) в конкретном месте я вставляю сниппет, который должен вывести эту страницу (дочерняя) в готовом виде с примененным шаблоном-подшаблоном (который указан в редакторе ресурса, а не в параметрах сниппета!). Но беда в том, что плэйсхолдеры заменяются значениями родительской страницы. Как сделать чтобы плейсхордеры заменялись на значения чилдрена?
Код сниппета:
// узнаем id страницы вызвавшей сниппет
$parentPageId = $modx->resource->get('id');
// определяем id-ы всех дочерних ресурсов и перебериаем их
$childrenPageIds = $modx->getChildIds($parentPageId);
foreach($childrenPageIds as $index => $childrenPageId)
{
// получаем ресурс
$pageObject = $modx->getObject('modResource', array(
'published' => 1,
'id' => $childrenPageId
));
// получаем шаблон ресурса
$templateObject = $modx->getObject('modTemplate', $pageObject->template);
// выводим
return $templateObject->content;
}
п.с. всю эту ерунду я делаю для того чтобы можно было на главной странице выводить все дочерние страницы в виде блоков с применением разных стилей. Может быть есть более правильное решение? Т.е. нужно создать страницу так, чтобы она была не ресурсом, а блоком в родительской странице и у этого блока может быть применен один из доступных стилей.
п.п.с я, конечно, понимаю, что можно заменить все плейсхолдеры значениями из $pageObject с помощью str_replace(), но как то это будет выглядит не очень =)