За последние 24 часа нас посетили 17607 программистов и 1715 роботов. Сейчас ищут 1803 программиста ...

Буферизация вывода и быстрые шаблоны

Тема в разделе "PHP для новичков", создана пользователем 440Hz, 11 авг 2006.

  1. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    Не все ;)
    И идея генерации XML блока, потом его парсинга, потом парсинга XSL блока, потом генерации из всего этого еще одного XML (ну или HTML) лично мне представляется гм... не самой вменяемой. С данной точки зрения любая другая технология будет менее извращенной.
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    AntonShevchuk
    Можно пример использования?
    Как будет выглядеть шаблон для вывода простой таблички (исходные данные хранятся в массиве), и как будет выглядеть код запуска этого шаблона?
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Dagdamor, я на днях это реализовал :) 30 строчек кода на пхп. из фич - осёл, лиса и кит производят трансформацию сами, не нагружая сервер.
     
  4. AntonShevchuk

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

    С нами с:
    6 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Kharkov
    Есть ощущение что вопрос риторический....

    Я использую расширенный Zend_View для работы с кэшем:
    PHP:
    1.  
    2. <?php
    3.     // set cache for template and some logic operation
    4.     if (!$View->cache('UNIQUE_ID', 60)) {
    5.      $View->data = array(array(....), array(....), .., array(....));
    6.     }
    7.     $View->setTemplate('index.tpl');
    8.     $View->display();
    9. ?>
    10. // index.tpl
    11. <table>
    12.     <? foreach($this->data as $row_id => $row) : ?>
    13.         <tr>
    14.         <? foreach($row as $cell_id => $cell) : ?>
    15.              <td><?=$cell?></td>
    16.         <? :endforeach; ?>
    17.         </tr>
    18.     <? :endforeach; ?>
    19. <table>
    20.  
    index.tpl - это пример использования as is, конечно его можно использовать как дочерний шаблон другого шаблона, или еще вариант написать helper с функционалом для построения таблицы (тогда это будет одна строчка в шаблоне)
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    не ceil, а cell :)
     
  6. AntonShevchuk

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

    С нами с:
    6 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Kharkov
    Спасибо - подправил... как-то оно с утра не очень педалить в форуме :)
     
  7. Ruzzz

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

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Здесь столько написано всего ) Вот если бы это все в статью оформить ... Ну начну читать )
     
  8. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Жаль, что мою старую тему прикрыли
    Возник вопрос: как красиво и понятно оформить следущий код:
    PHP:
    1. <?php
    2. function isUser(){
    3.  
    4. }
    5.  
    6. function isAdmin(){
    7.  
    8. }
    9.  
    10. function logIn(){
    11.  
    12. }
    13.  
    14. function logOut(){
    15.  
    16. }
    17.  
    18. function showLogInForm($type='user'){
    19.     ?>
    20.     <div style="text-align:center">
    21.          Представьтесь, пожалуйста.
    22.          <form name="logInForm" id="logInFormID" action="" method="post">
    23.          Имя пользователя: <input type="text" name="name"><br />
    24.          Пароль: <input type="password" name="password"><br />
    25.          <?
    26.          if ($type=='admin') {
    27.              ?>
    28.              <input type="hidden" name="admin" value="yes">
    29.              <?
    30.          }
    31.          ?>
    32.          <input type="submit" value="Вход">
    33.      </form>
    34.     </div>
    35.     <?
    36. }
    37.  
    38. ?>
    Хорошо или плохо такое частое использование "?>"/"<?" ? Или лучше делать винигрет из echo? Или покажите как это реализовать на этом шаблонизаторе.
     
  9. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    а мне стиль нравится
    Правда html-шаблон вынес бы все же в отдельный файл, а логику оставил тут же
     
  10. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    По-моему, имеет место быть уязвимость ;) (я про скрытое поле "йа одмин")
     
  11. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Dagdamor
    возможно :)
     
  12. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    topas
    мне тоже нравится. Так со стороны глянул - песня. Лишь бы не получилось, что больной помер от вскрытия. Я уже сейчас начинаю путаться в закрытии/открытии кода. И как это отразится на быстродействии? (моем и интерпретатора)

    example, please!

    Dagdamor
    имхо нет уязвимости. В зависимости от этого "йа админ" мы посылаем человека на logIn с параметром админ или нет. Там проверяем его в админской таблице. Чуток позже покажу. Помогите с шаблонами =)
     
  13. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    тут на восьми страницах что обсуждается?
     
  14. kostyl

    kostyl Guest

    Можно реализовать динамику и в Вашем примере только в цикле создавать и убивать экземпляр класса Buffer а потом накопившееся передать как одну из переменных. Получиться что в шаблоне переменная {траляля} замениться на сумму результатов шаблонирования. Нужно только дописать метод который не выводит контент а возвращает его. Правда увеличиться само колличество шаблонов в папке tempates :wink: , зато динамики в шаблоне нет и видно каждую детальку из которых собираются страницы.
    С уважением я.
     
  15. kostyl

    kostyl Guest

    Кидай, рад буду взглянуть,а то у меня с шаблонами кутерьма в голове, никак не выберу как реализовать...
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Очень интересная темка... Сперва я делал большие файлы, где перемешивался php и html, потом начал выделять некоторые повторяющиеся кусочки программы php в отдельные файлы и вставлять их с помощью include, потом крупные блоки html также начал выделять в файлы (что-то типа:
    PHP:
    1. [b]register-form.php[/b]
    2. <?php
    3. $html = "... табличка на html с формой регистрации ...";
    4. ?>
    5.  
    6. [b]register.php[/b]
    7. <?php
    8. if ($_GET["agree"] == "true") {
    9.   include("register-form.php");
    10.   echo $html;
    11. }
    12. ?>
    )
    И только относительно недавно узнал о существовании шаблонов и шаблонизаторов... Учился-то, в основном, по книгам, а в них (тех, с которых начинал изучение php) не затрагивался вопрос о шаблонах. Лишь недавно купил две большие и толстые книги (php 5 для начинающих А4 836 стр + php 5 для профессионалов А4 600 стр), в которых кое-что есть на эту тему. Естественно, меня это очень заинтересовало. Как Вы считаете, какой из существующих бесплатно распрастраняющихся шаблонизаторов - лучше и проще? Все ли они работают на сервере хостинга? И какой используется, например, в PHPBB2 - какой-то из уже готовых или разработчики PHPBB делали свой?
     
  17. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Да, и мне бы тоже было очень интересно почитать такую статью!!! И с шаблонами у меня в голове пока тоже "кутерьма"... :)
     
  18. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  20. kostyl

    kostyl Guest

    sobachnik
    Рекомендую написать свой, примеров на сайте полно, а также особая рекомендация писать native парсер, например с инициализацией переменных, которые находяться в шаблоне с помощью extract http://ua2.php.net/manual/ru/function.extract.php, буферизацие вывода с помощью ob_start http://ua2.php.net/manual/ru/function.ob-start.php ...., и естественно перед этим includ - а файла шаблона.
     
  21. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    sobachnik
    к сожалению слабовата документация, хотя как таковая есть в скачиваемом пакете. там же и примеры есть. Я все по этому изучил.

    imho: XTemplate послабее Smarty, но эта слабость и есть сильная сторона - разделяет PHP и HTML код.
     
  22. kostyl

    kostyl Guest

    это не сильная сторона шаблонов, а обычная сторона, они для этого и сделаны в основном, и чтобы отделить не код а ЛОГИКУ ПРЕДСТАВЛЕНИЯ, потому что в шаблонах php код классически может присутствовать...
     
  23. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    kostyl
    в XTemplate не может присутствовать.

    Мне в Smarty не понравилось втягивание именно пхп кода в темплейт (всякие циклы, if else, что там еще).
    XTemplate много проще (не так гибок в этмо вопросе), но он заставляет ДУМАТЬ, как вывернуться из сложно ситуации, когда так и тянет вставить циклик в темлейт.

    А вот про ЛОГИКУ РАБОТЫ - это от лукавого ;) не надо словами играться :p
     
  24. kostyl

    kostyl Guest

    я уже исправил
    Можно написать такой шаблонизатор, что будешь всю жизнь думать как вывернуться, классы пишут чтобы было проще, а не сложнее. А вставить циклик в тэмплейт - тут нет ничего страшного, ну я вставвляю - и всё работает, и нормально работает, и это я делаю за пару секунд, а не ДУМАЮ пол часа, дописываю кучу ненужного..., ps и не парсю по два раза...
     
  25. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    kostyl
    Спокойной!, может я тоже когда-нибудь буду использовать движок типа смарти... :)
    К слову, очень долго пока думать не приходилось ;). Все задачи решаются без внесения php (или -образного как в смарти) кода в темплейт (я ПОКА сторонник жесткого не пускания кода в темлейт).

    Кстати, причем тут классы ? ;)

    А вообще, в холли ворс не учавствую. Считаю, что для новичка начать с ЛЕГКОЙ (в использовании и понимании), но достаточно мощной версии шаблонизатора (XTemplate) очень даже желательно. Затем можно и Smarty полюбить, особенно если нужда заставит.

    ps: Слегка модифицировал XTemplate под свои нужды, например: вызов user func на парсе блока - полезная иногда вещь (особенно если играться параметрами тага блока или переменной).