Интересный вопрос прозвучал на Хабре: «Может ли один спиппет быть продолжением другого по php коду?».
Вообще это фишка интересная. К примеру вы хотите вызвать некий сниппет, к примеру [[mySnippet?param1=`var1`&ms2=`var2`]], а внутри этого снипета есть вызовы других сниппетов и/или чанков, в которые надо передать изначальные параметры.
И вот полезная информация:
Как и в любом элементе (чанк, сниппет и т.п.), внутри сниппета есть параметр $scriptProperties. Он как раз и содержит переданные параметры.
Вы его можете передать как аргумент в последующий сниппет, к примеру внутри своего сниппета вызвать $modx->runSnippet($name, $scriptProperties); (и так сколько угодно вложенностей.). При этом по ходу можно переопределять и/или дополнять $scriptProperties.
Много ясностей внесет кеш-функция тестового сниппета:
<?php
function elements_modsnippet_35($scriptProperties = array())
{
global $modx;
// Если переданный параметр - массив
if (is_array($scriptProperties)) {
// "Распаковываем" этот массив, преобразуя его элементы в php-параметры
// В нашем случае это будут $param1='var1'; и $param2='var2';
extract($scriptProperties, EXTR_SKIP);
}
// Можем вывести результат, чтобы убедиться, что это массив параметров
print_R($scriptProperties);
exit; // exit для отладки, и убираем, чтобы продолжить код
// Передаем параметры дальше
if (empty($tpl)) {
return $modx->runSnippet('nextSnippet', $scriptProperties);
} else {
return $modx->getChunk($tpl, $scriptProperties);
}
}
чет я «Много ясностей » не догнал… так что в modx revo можно вызывать(сниппет из сниппета) или нет?
Совершенно верно. Сниппет — это чистый php, он весь в Вашем распоряжении. А как бонус — объект $modx со всеми плюшками. Только в сниппете формат [[snippet_name]] не пройдёт, нужно использовать методы $modx, в данном случае -
$modx->runSnippet('snippet_name',$params)