Николай Ланец
31 июля 2013 г., 14:10

Вызов вложенных сниппетов с передачей параметров.

Интересный вопрос прозвучал на Хабре: «Может ли один спиппет быть продолжением другого по 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)

Добавить комментарий