За последние 24 часа нас посетили 17742 программиста и 1624 робота. Сейчас ищут 1799 программистов ...

Smarty: использование методов объекта цепочкой в шаблоне

Тема в разделе "Прочие вопросы по PHP", создана пользователем DiL, 31 май 2008.

  1. DiL

    DiL Активный пользователь

    С нами с:
    5 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    В скрипте:
    PHP:
    1.  
    2. $smarty->assign('person', $person);
    3.  
    В шаблоне:
    Код (Text):
    1. {$person->getSomeModel()->someMethod()}
    Где $person объект; getSomeModel() возвращает объект метод которого потом выполняется.

    Проблема: smarty не понимает подобной конструкции. Пишет:
    Вызов:
    Код (Text):
    1. {$person->someModel->someMethod()}
    Проходит спокойно. Повидимому трудности вызывают промежуточные вызовы методов, но они мне нужны.

    Как заставить смарти обрабатывать такой код адекватно?
     
  2. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    я чот наивно думал что смарти это тупо шаблонизатор и что перед отдачей данных шаблонизатору нужно пыхом ПОДГОТОВИТЬ данные....
     
  3. DiL

    DiL Активный пользователь

    С нами с:
    5 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    В документации смарти:

    Интересно MaXyC, зачем же это они демонстрируют применение метода объекта?..


    Если по делу, а не "тупо" (с) трепаться, ответ найден на официальном форуме, где вопрос неоднократно поднимался (а значит людям это нужно):
    Тема закрыта.
     
  4. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    затем, что они - идиоты. а ты идёшь по их стопам.
     
  5. DiL

    DiL Активный пользователь

    С нами с:
    5 фев 2008
    Сообщения:
    6
    Симпатии:
    0
    Обоснованный довод :lol:

    Да, наверное умнее коллекцию объектов (агрегирующие ещё несколько объектов и т.д.) приводить к массиву, и тратить на это дополнительное время исполнения...

    Удачи, процедурные вы мои...
     
  6. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    нет, умнее предоставить каждому объекту по шаблону.
     
  7. ml

    ml Активный пользователь

    С нами с:
    8 июл 2006
    Сообщения:
    5
    Симпатии:
    0
    пропатчь Smarty_Compiler.class.php
    PHP:
    1.  
    2. $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . ')+)';
    3. $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:
    1.  
    2. $this->_obj_start_regexp = '(?:' . $this->_dvar_regexp . '(?:' . $this->_obj_ext_regexp . '(?:'.$this->_obj_params_regexp.')?)+)';
    3. $this->_obj_call_regexp = '(?:' . $this->_obj_start_regexp . '(?:' . $this->_dvar_math_regexp . '(?:' . $this->_num_const_regexp .'|' . $this->_dvar_math_var_regexp . ')
     
  8. creage

    creage Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    а я согласен с Махусом.