Передача PropertySet в шаблоны Smarty

Предлагаю для большего удобства в использовании modxSmarty добавить в функции расширений processor, chunk и snippet возможность передавать в них стандартные наборы параметров.

На данный момент это делается в коде: {snippet name=«Wayfinder» params=«startId=12&outerClass=myclass»} или сначала формируем массив или строку в JSON и передаем в функцию.

Но ведь в MODX есть прекрасный механизм наборов параметров с удобным интерфейсом в админке. Ведь удобнее было бы написать так: {snippet name=«Wayfinder» propset=«set1,set2,set3» params=«some_params»} где set1,set2,… — это наборы параметров PropertySet.

Для того, чтобы это добавить требуется внести некоторые изменения в функции:

  • core/components/modxsmarty/smarty_plugins/function.chunk.php
  • core/components/modxsmarty/smarty_plugins/function.snippet.php
  • core/components/modxsmarty/smarty_plugins/function.processor.php

Во всех этих функциях нужно сразу после блока

if(isset($params['params'])){
        $scriptProperties = $params['params'];
        // Check if String
        if(is_string($scriptProperties)){
            $scriptProperties = $modx->parser->parseProperties($scriptProperties);
        }
    }

добавить блок

if (isset($params['propset'])) {  //есть параметр propset
        $p=$params['propset']; 
        $psets=explode(" ,@",$p); //разобьем на составляющие
        $sp=array();
        foreach($psets as $p) {
         $props=$modx->getObject('modPropertySet',array('name'=>$p))->getProperties();
         if(is_array($props)){
            $sp=$props+$sp; //наборы параметров, указанные правее в списке, более значимы
         }
        $scriptProperties+=$sp; //добавим свойства
        }
    }

И мы имеем все удобства пользования наборами параметров.

Comments

Извиняюсь! Как-то пропустил топик…

По поводу наборов параметров в чанках и сниппетах: как я говорил ранее, это и сейчас имеется. То есть просто вызываем {snippet name=«mysnippet@propset1@propset2@...»} или {chunk name=«mychunk@propset1@propset2@...»}. А вот в процессорах этого действительно изначально нет. То есть вообще изначально сам MODX не предусматривал вызова процессоров с наборами параметров. Буду вносить этот функционал в modxSmarty. Создал себе тикет.