Как я понял, эти функции только строку возвращают Нет, ты не правильно понял. Ты имей ввиду, что даже если ты в шаблоне написал {$var}, тебе не $var сразу возвращается, а $_smarty_tpl->getVariable('var')->value. То есть все прогоняется через Smarty-объект в любом случае. А результат подобных функций может быть абсолютно любым, даже объектом. {processor} же возвращает результат-массив. Посмотри что там в функции прописано. Кстати, а если в функцию расширения function.processor.php добавить еще один параметр, например, props, который будет подставлять в вызов процессора набор параметров, взятый из MODX? по той же схеме, как делает ns? Идея по-моему довольно здравая. Допиши эту функцию и оформи топик, погоняем, и может действительно и включим в пакет. Только имей ввиду, что нормальная практика перечислять сразу несколько наборов, к примеру {snippet name=«snippet@propertySet1@propertySet2@propertySet3»}
Я про функцию расширения smarty, вроде твоих smarty_plugins/*.php Я попробовал написать smarty_plugins/function.params.php: ?php function smarty_function_getprops($params, & $smarty) { if (!isset($params['name']) OR !$name = $params['name']) { return; } if(!empty($params['assign'])){ $assign = (string)$params['assign']; } $output=$smarty->modx->getObject('modPropertySet',array('name'=>$name))->getProperties(); return !empty($assign) ? $smarty->assign($assign, $output) : $output; } Как я понял, эти функции только строку возвращают Кстати, а если в функцию расширения function.processor.php добавить еще один параметр, например, props, который будет подставлять в вызов процессора набор параметров, взятый из MODX? по той же схеме, как делает ns? Ну, например, {processor name="some_processor" ns="namespace" props="some_props_name"}
Нет, я не про процессоры, с ними все понятно, я про конструкции типа {processor… и т.п. И все-таки, не могу понять, где у тебя возвращается только строка? Можешь более развернутый пример дать? Я что-то вообще не улавливаю где там такие ограничения.
Просто хочется иметь нечто вроде наборов, чтобы все в одном месте лежало, а при необходимости нужное по имени вытаскивать. Все равно на все случаи жизни наборами не запасешься. И есть барьер, когда куча наборов не помогают, а мешают, так как многое взаимосвязано, и правишь одно, а в другом месте боком выходит. Напиши себе несколько базовых процессоров и их развивай. А лучше сразу сборку себе движка сделай и все.
Нет, неправильно понял. Наоборот, процессоры очень даже возвращают массивы. А если очень надо, то можно и объекты возвращать. Это сниппеты строки только возвращают. Нет, я не про процессоры, с ними все понятно, я про конструкции типа {processor ... и т.п. А без сниппетов я совсем хочу по максимуму обходиться. Но я тоже уже подумал, что заполнить массив по месту как-то попроще будет, чем вызывать набор параметров. Да и свой модуль написать можно, где все это собрать в одну кучу. Подумаю еще. Просто хочется иметь нечто вроде наборов, чтобы все в одном месте лежало, а при необходимости нужное по имени вытаскивать.
ну, чтобы сразу из наборов дергать параметры. Но, насколько я понял, smarty-планигы возвращают только строку? Нет, неправильно понял. Наоборот, процессоры очень даже возвращают массивы. А если очень надо, то можно и объекты возвращать. Это сниппеты строки только возвращают. Про это я писал здесь: community.modx-cms.ru/blog/tips_and_tricks/9966.html Возникла у меня идея сделать плагин, ну, чтобы можно было делать что-то типа А зачем? В сниппеты параметры передаются в имени. В плагинах параметры можно назначить по дефолту в методе initialize через $this->setDefaultProperties(). Не думаю, что имеет смысл утяжелять все это дело.
Кастати, по поводу передачи параметров… Возникла у меня идея сделать плагин, ну, чтобы можно было делать что-то типа {processor action=«getmenu» ns=«site» params={params name='top-menu'} assign=result} ну, чтобы сразу из наборов дергать параметры. Но, насколько я понял, smarty-планигы возвращают только строку? И json-encode тоже отдает не в том виде, что надо. Можно ли сделать что-то вроде этого? И стоит ли овчинка выделки?