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

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