За последние 24 часа нас посетили 8785 программистов и 485 роботов. Сейчас ищут 217 программистов ...

Шаблонизатор Fast_temlates last ver

Тема в разделе "Решения, алгоритмы", создана пользователем Skyers, 31 июл 2009.

  1. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    В общем искал на форуме, не нашел не че подобного поэтому решил выложить.

    Используется cls_fast_template.php версии cls_fasttemplate_1.6.2
    взять можно тут http://www.grafxsoftware.com/product.ph ... mplate/26/
    пример использования

    PHP:
    1.  
    2. $CONTENT="Привет всем";
    3. include ("cls_fast_template.php");
    4. $tpl = new FastTemplate("./templates");
    5. $tpl->define (array(main=>"templ.html"));
    6. $tpl->assign(array(CONTENT=>$CONTENT));
    7. $tpl->parse (MAIN, "main");
    8. $tpl->FastPrint();
    9.  
    ну и естественно templ.html
    HTML:
    1.  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    3. "http://www.w3.org/TR/html4/loose.dtd">
    4. <title>Шаблон</title>
    5. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    6. </head>
    7. {CONTENT}
    8. </body>
    9. </html>
    10.  
    Я это все к тому что посмотрел на несколько реализаций шаблонизации и пришел к выводу что не нужно изобретать велосипед... Все это прекрасно работает на php 5.*
     
  2. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    круто! буду теперь использовать! СПАСИБО! Никада не видел столь изящного решения.

    =)
     
  3. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    мм. Бомба-яд
     
  4. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    издеваетесь ? )
     
  5. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.372
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Норм, но есть куда стремиться.
     
  6. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Skyers, а я, если честно, не восхищен. Он позволяет только подставлять переменные? Если да, то этого слишком мало. Если нет, то покажи пример циклов, условий и , если есть, рекурсий. Это три вещи, которые ИМХО основные в шаблонизаторе.
    Код (Text):
    1. $tpl->assign(array(CONTENT=>$CONTENT));
    2. $tpl->parse (MAIN, "main");
    Что это за CONTENT и MAIN? Константы? Если да, то почему в глобальной области видимости и сколько есть констант? Если нет, то почему не взяты в кавычки, что генерирует ошибку уровня Notice?
     
  7. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.372
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    TheShock
    Слишком многого требуешь от новичка :) Эдак всё желание учиться отобьёшь
     
  8. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в шаблоне только {TITLE} и должен быть, а логика - это придумки для усложнения работы.
     
  9. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    Я думаю что все ответы ты найдешь по данной мной ссылке или в описании которое находится внутри архива, мои потребности на данный момент были решены этим примером...

    а поскольку я новичок, то уж извините если что не так =)
     
  10. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Не люблю наличие логических блоков в шаблонах, но, в большинстве случаев, без них очень сложно.
    Например, простейший блок:

    [group=5]{link}[/group]

    Естественно, можно абсолютно спокойно со стороны PHP {link} показывать только тем, кто принадлежит какой-то группе.
    Но вот уже оформить этот блок уже никак, если только со стороны JS определять контент тега и пр.
     
  11. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    У меня появилась дибильнейшая идея: оформлять логические блоки со стороны клиента (на JS), a контент отдавать с сервера. Подстановка группы ничего не даст, ибо контент отдается сервером, а вот оформление можно своё забацать =)
     
  12. Hight

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

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    У меня шаблонизатор тоже только подставлять переменные и умеет. А вся логика в коде.
     
  13. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    логика она в голове.
    =)

    а руки, они точатся ржавым напильником до крови, что б писалось потом легче и понятнее.

    многи так и делают. отдают клиенту JSON, а там по данным генерят HTML. очень продуктивно. сам хочу попробовать сие, но все руки не доходят.
     
  14. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Я так понял, что он где-то взял этот шаблонизатор.


    Только {TITLE} - это усложение. А циклы - они для облегчения. Как ты напишешь без цикла?
    HTML:
    1. <!-- [LOOP] Posts -->
    2.   <div class='postAuthor'>{Posts.Author}</div>
    3.   <div class='postText'>{Posts.Text}</div>
    4. <!-- / -->
    Или вынесешь это в отдельный шаблонный файл? Уж извини, но когда у тебя один документ находится в трех десятках файлов - это сущий кошмар для верстальщика.

    HTML:
    1. <!-- [IFNOT] User.isLogged -->
    2. <div class='loginForm'>
    3.     ..
    4. </div>
    5. <!-- [/] -->
    Это даже не логика, а базовые, примитивные действия. Единственные два варианта, как можно реализовать их вышезазначенным способом - это либо мазохистское разбиение на десятки файлов одного документа, либо хтмл-блоки в переменных. Оба варианта - ужасных.
     
  15. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    я на консольном форуме делаю именно так - у меня ни одного хтмл-тега на сервере.
     
  16. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Да, согласно сайта, блоки в этом шаблонизаторе - тоже есть. Интересно, как они решили проблему с видимостью переменных. Видны ли глобальные переменные из блока? Если да, то что будет, если они пересекутся? Если нет, то что делать, если мне понадобится какая-нибудь глобальная переменная, например языковая.

    HTML:
    1.   <head>
    2.     <title>{TITLE}</title>
    3.   </head>
    4.   <body bgcolor='lightblue'>
    5.     <center>
    6.       <font color='blue'>
    7.         <font face='arial' size='4'><b>{HEADING}</b></font>
    8.         <font face='arial'><p>{TEXT}</p></font>
    9.           <table border='1' bgcolor='darkblue'>
    10.             <tr>
    11.               <th>
    12.                 <font color='yellow'>{NAME}</font>
    13.               </th>
    14.               <th>
    15.                 <font color='yellow'>{POSITION}</font>
    16.               </th>
    17.             </tr>
    18.           <!-- BEGIN DYNAMIC BLOCK: employees -->
    19.             <tr>
    20.               <td>
    21.                 <font color='yellow'>{C_FIRSTNAME} {C_LASTNAME}</font>
    22.               </td>
    23.               <td>
    24.                 <font color='yellow'>{C_POSITION}</font>
    25.               </td>
    26.             </tr>
    27.           <!-- END DYNAMIC BLOCK: employees -->
    28.         </table>
    29.         <font face='arial'><p>{LOCAL_TIME}: <b>{C_LOCAL_TIME}</b></p></font>
    30.       </font>
    31.     </center>
    32.   </body>
    33. </html>
     
  17. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    верстка осуществляется ДО программинга.
    =)

    JPG->HTML->PHP
     
  18. kostyl

    kostyl Guest

    Skyers
    молодец, как для новичка пойдет, но надо шире раскрывать раз выкладываешь, по больше примеров в том числе и с циклами и прочим...
     
  19. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Ага, а еще перед программированием идеально прорабатывается структура кода, все записывается на бумажке и потом нету одного отклонения от намеченного плана. ;)
    Имхо, верстка, как и код, дорабатывается, меняется, усовершенствуется с ростом любого более-менее развивающегося проекта.
     
  20. Mr.M.I.T.

    Mr.M.I.T. Активный пользователь

    С нами с:
    28 янв 2008
    Сообщения:
    4.584
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    гон!
     
  21. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.379
    Симпатии:
    12
    Адрес:
    Дмитров, МО
    Может я сейчас глупость напишу, но... по мне так одной подстановки переменных и BEGIN, END - вполне достаточно... Циклы и условия в основной программе. Что мешает пропарсить блок между BEGIN и END несколько раз в цикле, подставляя разные значения? Ну либо парсить или не парсить определённый блок между какими-то BEGIN и END в зависимости от каких-то условий...
     
  22. kostyl

    kostyl Guest

    TheShock
    440Hz
    Вы спорите о двух достойных подходах.
     
  23. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    да не спорим мы. просто опытом делимся.

    мож кому пригодится.
     
  24. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    sobachnik, ну я так и сказал. Обсуждение было о том, что 440Hz предлагал вообще отказаться от любых блоков.