За последние 24 часа нас посетили 17884 программиста и 1600 роботов. Сейчас ищут 857 программистов ...

чистый шаблон или чистый класс?

Тема в разделе "Прочие вопросы по PHP", создана пользователем kostyl, 19 апр 2009.

  1. kostyl

    kostyl Guest

    Привет кого не видел!!!
    Есть вопрос. Допустим имеется шаблон
    Код (Text):
    1.  
    2.         <?php foreach($Users as $User) { ?>
    3.         <tr>
    4.         <td>$User->Message</td>
    5.         </tr>
    6.         <?php } ?>
    и код :
    PHP:
    1.  
    2. <?php
    3. $Users = Class.GetUsers();
    4. $View = new View('usermessages.tpl');
    5. $View->Assign('Users', $Users);
    6. $View->Show();
    7.  
    Есть функция GetHTML(), которая обрабатывает BBCod-ы или даже просто htmlentities(), которую как бы надо вставить в шаблон типа <td>GetHTML($User->Message)</td>, либо в класс пользователя... Куда её засунуть не пойму - и там она не нада, и там... Есть мнение, что надо в $View но чтото ума не приложу как?
    ps: $View по типу

    http://www.php.ru/forum/viewtopic.php?t=15269
     
  2. Cron

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

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    Имхо, включи функцию во View. Все равно она отвечает только за вывод, я так понимаю. Где ж ей еще быть тогда.
    Если используется часто, то можешь сделать расширение на Assign, типа такого:

    Код (Text):
    1.  
    2. <?php foreach($Users as $User) { ?>
    3.       <tr>
    4.             <td><?=$User->Message?></td>
    5.       </tr>
    6. <?php } ?>
    PHP:
    1.  
    2. <?php
    3. $Users = Class.GetUsers();
    4. $View = new View('usermessages.tpl');
    5.  
    6. /**
    7.  * HTML_ENTITIES - указывает на необходимость обработать определенной функцией
    8.  * если таких функций много, то реализуй как callback
    9.  */
    10. $View->Assign('Users', $Users, HTML_ENTITIES);
    11. $View->Show();
    12.  
    А вообще, можно сделать по типу ZendFW - ViewHelper и вызывать его в шаблоне, ничего страшного в этом нет.
    P.S. А нужен ли во вьювере весь User, если мы выводим только Message? Или тут только часть от более общего?
     
  3. kostyl

    kostyl Guest

    я вкратце пример привел, а вообще User c ActiveRecord и как из твоего примера я пойму, что надо именно такието поля обработать, он же мне их подгружать будет, а если подгрузить что не надо???
     
  4. Cron

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

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    Не понял твоего вопроса...

    Я имел ввиду, что шаблон у тебя называется "usermessages.tpl". Я предположил, что он нужен только для вывода сообщений пользователя/пользователей. В этом случае, логичнее передовать во вьювер не массив с пользователями, а чистый массив с сообщениями. Тогда и обработку дополнительной функцией организовать легче. Потому что

    PHP:
    1.  
    2. $View->Assign('Users', $Users, HTML_ENTITIES);
    3.  
    по сути мало информативно. Ведь View все равно не знает, что функцией нужно обработать именно $User->Message.
     
  5. kostyl

    kostyl Guest

    вот это я и имел в виду. Скорее всего прийдется делать обвертку-делегатор над $Users и ее с внедренным $Users передавать в шаблон...
     
  6. Cron

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

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    Пробуй.
    А можно в класс Users добавить метод getMessages(), который будет возвращать чистый массив сообщений?
     
  7. kostyl

    kostyl Guest

    неа, это лишнее
     
  8. Cron

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

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    kostyl
    Ну смотри сам. По обрывкам кода трудно судить...
     
  9. kostyl

    kostyl Guest

    причем тут код, еще и обрывки я пример идеологии привел, а не пример кода...
    Черт, а никто не знает как попроще можно сделать. Может забить да формировать массивы для шаблона из массива класса, ведь в классе же нету ссылок на сообщения, а они тоже могут понадобиться, и в этом процессе вывод и обрабатывать?