За последние 24 часа нас посетили 19389 программистов и 1643 робота. Сейчас ищут 1197 программистов ...

Шаблонизатор

Тема в разделе "Решения, алгоритмы", создана пользователем Danilka, 30 апр 2008.

  1. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Хотел бы обсудить теорию создание шаблонизаторов на php.
    Знаю, что тема избитая и много готовых решений. НО!
    1. Часто нужен шаблонизатор, не требующий дополнительной установки и настройки.
    2. Зачастую нужен простой шаблонизатор, без кучи ненужных наворотов.

    Предлагаю обсудить следующие темы:
    - Идеальный синтаксис, какой он должен быть?
    - Теорию разбора выражений.
    - Теорию хранения и кеширования без заморочек (доп настройки, бд).

    У кого какие есть соображения на эту тему?

    P.S.
    По ходу обсуждения топика развился проект wwwPHParser.ru, прошу всех к тестированию.
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Danilka
    Идиальный шаблонизатор - отсутствующий (в том понимании, как многие его представляют).
    Посмотрите как сделаны шаблоны у меня. Можете поспрашивать Nemo, он его изучает какое-то время, вроде очень доволен.

    http://file.lv/framework.rar
     
  3. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Psih
    :) Запостил тему и пошёл в бассейн. Пока мылся в душе, пришёл к той же идее, что быстрее чем пых, код на пыхе парсить не будет и понял, что нужно юзать его. Тут прихожу домой, открываю и вижу! Ну эт шутки-шутками, а по теме.
    Не особо я понял, как он у вас работает, но суть ясна.
    Предлогаю немного развить идею.
    Работает-то ваш безусловно быстро. Но, что с синтаксисом шаблонов? Не думаю, что он уж так удобен...
    А как же классические конструкции типа {if my_var} something {/if} ?
    Предлогаю следующую идею. Можно написать любой (пусть даже очень тормозной парсер) для кода, вид которого я написал. Парсер будет перегонять этот код в php конструкции. Самый тупой способ заюзать preg. Быстро (в написании) и сердито. В результате получим шаблон на подобии вашего, а его уже можно простым пыхом выполнить. Ну и можно разные фичи приделать на подобии кеша и пр.
     
  4. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
  5. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    А что смарти? Громоздки, ставится отдельно. Наворотов выше крыши.
     
  6. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Danilka - всмысле ставится отдельно ??

    лишнее отрезать, нужное добавить .. :) - и получается указанный функционал ;-)
     
  7. creage

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

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    Smarty forever. Прикрутил его к CodeIgniter-у - не нарадуюсь.
     
  8. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Чем вам PHP не шаблонизатор.
     
  9. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    HTML like: аки теги и аки атрибуты. (Моя мечта.)
    XML parser (libxml в PHP5 стандартный модуль).
    Файлы. Закэшированные куски парсер пропускает.

    Но это, конечно же, очень медленно. Килобайт 100 кода и парсер накроется медным тазом.
     
  10. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  11. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Sergey89, очень красиво и не геморойно. Это я иронизирую. %) DOM в роли ядра шаблонизатора это хорошо (точнее, xpath это хорошо), но это скорее эдакий javascript, а не html.
     
  12. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Мне понравилась идея реальизовать преконвертор из любого синтаксиса в пшп, а потом пых уже обработает. Получится и удобно и быстро.

    P.S.
    Hight, вот какого хрена, а?
    Всегда в таких темах найдётся кто-то, кто это скажет?! Что за народ? Не видно о чём говорим? Не верю, что ты прочитал и не вник. Нет бы по теме чего сказать...
     
  13. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Я и говорю. Абсолютно не вижу смысла переносить логику в шаблоны. Логика должна быть в программе, а не в шаблоне.

    upd. Конечно Я могу себе представить случай когда в шаблоне может понадобиться логика. Но ИМХО это не оправдывает трату ресурсов на разработку некого парсера шаблонов.
     
  14. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    И какого же тогда их столько понаписано?
    Видимо есть всё-таки какие-то плюсы в шаблонах?
     
  15. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    велосипед был изобретен в 1800 году, однако это не мешает создавать его и поныне %)
     
  16. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    antonn
    И что же тут велосипедного? По-моему очень даже одекватная идея совмещающая все плюсы парсеров и вставки html прямо в php.
    Если это велосипед, что же тогда все остальные парсеры?
     
  17. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    HTML + native PHP рулят. Если красиво и грамотно построить все, а не как попало.
     
  18. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Danilka
    я про то, что несмотря на другие варианты (возможно лучшие) люди все же изобретают велосипед, кто то ради тренировки и интереса, кто то парируя "а вон другие же делают, значит и мне надо" :)
     
  19. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    antonn
    Не нужно мне этого случая рассказывать. Я сам был противник шаблоно и начал их использовать только тогда, когда они на самом деле понадобились.
     
  20. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    HTML:
    1. {if my_var}
    2. something
    3. {/if}
    4.  
    5. <!-- vs //-->
    6.  
    7. <? if (get('my_var')){?>
    8. SOME HTML
    9. <?}?>
    10.  
    Не вижу разницы в плане синтаксиса. Последнее хоть подсвечивается нормально.
    Первый вариант можно прекомпилировать в PHP и будет почти тоже самое, но теряется гибкость функционала и возможностей. Делать как в Smarty модификаторы и плагины - усложнение, потеря скорости и рассудка (аля ООП ради ООП).
    Я работал со smarty, я знаю что он может и на что похожи шаблоны в итоге. Да, я работал _только_ со сложными проэктами, я _никогда_ не работал над простыми сайтиками, только долгосрочные большие проэкты от 5-6 месяцев и дольше. Поэтому я не буду спорить про простецкие сайтики - не моя область. А в моей Smarty просто не применим.
    З.Ы. Кстати, на новой работе используют XML style теги и обрабатывают XML парсером шаблоны. Но компания работает над корпоративными внутренними системами, поэтому тут оно применимо и очень удобно. А вот для WEB'а я бы такое не использовал - слишком тяжело.
     
  21. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Psih
    Почему? По идеологическим соображениям или другим?
     
  22. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Проекты!.. Просто глухая е, как в секс, свитер.
     
  23. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Dagdamor
    По причинам fucking sky high memory and cpu usage.

    Практически все в интернете соглашаются что Smarty без opcode кешера применим только при разработке. А многие со временем приходят к выводу что он и не нужен, хоть конечно и функционален, удобен но ресурсы экономить важнее. Да и порой проще обычным PHP да ещё и быстрее. Просто гуглом пошарте по форумам и статьям, не только русским.
     
  24. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    изБитая
    идЕальный
    предлАгаю
    Адекватная

    По сабжу - пировский оказался удобен.
     
  25. Danilka

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

    С нами с:
    8 ноя 2007
    Сообщения:
    192
    Симпатии:
    0
    Наваял я то, о чём писал. Работает на ура, но выкладывать пока не буду. Добъю один проект на нём полностью, чтобы все косячки на первый раз подправить.

    Шмат шаблона на вскидку, для примера:
    HTML:
    1.  
    2. [if show_table]
    3. [load pl_search]
    4. <center><table id="main_table" bordercolor="#3399CC" cellpadding="3" cellspacing="0" width="80%">
    5.     <tr>
    6.         <td width="0">Операции</td>
    7.         <td width="0"><a title="Отсортировать настройки по названию" class="mt_a" href="[this_link]&order=name">Название[order_name]</a></td>
    8.         <td width="30%">Значение</td>
    9.         <td width="70%">Описание</td>
    10.     </tr>
    11.     [loop table]
    12.         <tr>
    13.             <td align="center" valign="middle">
    14.                 <a title="Редактировать" href="[site_url]panel.php?pl=cfg&do=edit&id=[id]&p=[p][src]"><img src="[dis]edit.gif"></a>
    15.                 &nbsp;
    16.                 <a title="Удалить" onClick="return window.confirm('Вы уверенвы, что хотите удалить настройку ([name]) безвозвратно?');" href="[site_url]panel.php?pl=cfg&do=del&id=[id]&p=[p][src]"><img src="[dis]del.gif"></a>
    17.             </td>
    18.             <td>[name]</td>
    19.             <td>[value]</td>
    20.             <td>[about]</td>
    21.         </tr>
    22.     [/loop]
    23. </table></center>
    24. [/if]
    25.