В скрипте: PHP: $smarty->assign('person', $person); В шаблоне: Код (Text): {$person->getSomeModel()->someMethod()} Где $person объект; getSomeModel() возвращает объект метод которого потом выполняется. Проблема: smarty не понимает подобной конструкции. Пишет: Вызов: Код (Text): {$person->someModel->someMethod()} Проходит спокойно. Повидимому трудности вызывают промежуточные вызовы методов, но они мне нужны. Как заставить смарти обрабатывать такой код адекватно?
я чот наивно думал что смарти это тупо шаблонизатор и что перед отдачей данных шаблонизатору нужно пыхом ПОДГОТОВИТЬ данные....
В документации смарти: Интересно MaXyC, зачем же это они демонстрируют применение метода объекта?.. Если по делу, а не "тупо" (с) трепаться, ответ найден на официальном форуме, где вопрос неоднократно поднимался (а значит людям это нужно): Тема закрыта.
Обоснованный довод :lol: Да, наверное умнее коллекцию объектов (агрегирующие ещё несколько объектов и т.д.) приводить к массиву, и тратить на это дополнительное время исполнения... Удачи, процедурные вы мои...
пропатчь Smarty_Compiler.class.php PHP: $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)'; $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_obj_params_regexp . ')?(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp . '|' . $this->_dvar_math_var_regexp . ')*)?)'; замени на: PHP: $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . '(?:'.$this->_obj_params_regexp.')?)+)'; $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp .'|' . $this->_dvar_math_var_regexp . ')