За последние 24 часа нас посетили 17466 программистов и 1719 роботов. Сейчас ищут 1523 программиста ...

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

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

  1. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я в принципе систему сайта не так строю, так что тут можно спорить до синевы и никто не будет прав.

    да в общем дело-то не в том чьи шаблоны лучше. данный пример был для новичков, а профи пишут совсем по другому.
     
  2. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    В том и задача шаблона, чтобы "родной синтаксис PHP" остался в ведении у программиста.
    А шаблоны, как известно, пишутся для дизайнеров. А дизайнер может быть очень далеким от разного рода программирования.
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    D.Lans
    В том то и дело что ты не совсем прав !!! (хотя и прав во многом)

    Дело в том что у РНР несколько синтаксисов, обычный и упрощённый, и вот второй как раз идеально подходит для дизайнеров... (в использовании он не сложнее любого preg-based шаблонизатора)

    А вот "прописные-истины" которые вероятно терзают многих с самого начала этого топика (о разделении HTML от РНР) это немного другое дело, там речь о разделении логики представления от логики приложения (т.е об отделении дизайна от кода)
     
  4. SeregA

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

    С нами с:
    2 фев 2006
    Сообщения:
    269
    Симпатии:
    0
    Адрес:
    Saint Petersburg, Russia
    БЛИН! Я у тебя уже НЕДЕЛЮ в асе добиваюсь инфы о морф. поиске и ФулСерче
     
  5. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Заметил: постоянно используется
    include_once('buffer.inc');
    А такого файла нет.
    Может
    include_once('buffer.php');
    ?

    И еще ошибка:
    Добавим в коструктор


    И вопрос такой.
    В Parse() используется массив вроде GLOBALS
    Можно узнать, откуда он берется, раз он не передается в функцию напрямую?
     
  6. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    GLOBALS - суперглобальный ассоциативный массив содержащий в себе все глобальные переменные в виде имя переменной => значение в том числе и себя
     
  7. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    В общем, я с большим трудом написал свою динамику в системе шаблонов..

    Но все равно жду совета от 440hz - он полагаю сделает лучше и удобнее. :)
     
  8. Serg

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

    С нами с:
    7 авг 2006
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Тамбов
    Супер! Я как раз думал, как бы попроще сменить, например, цвет фона, ссылок и таблиц у нескольких десятков файлов. Теперь буду знать.
     
  9. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    это ты о чем? все это делается на CSS.
     
  10. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Народ.

    Моя система шаблонов работает на примере из этой темы.
    Все отлично, в общем-то, но есть одна проблема.

    Сама суть описанной в этой теме системы.
    Берем .tpl файл, состоящий из HTML/CSS и вставок, типа {text}.

    До этого времени мне подоюной системы хватало, но возникли проблемы, когда мне понадобилось вставить PHP-код на страницу.

    Его просто вставлять то некуда!

    Я подумал и сделал так: require() PHP в методе $this-parse() системы шаблонов.

    Но это неуклюжее решение, к тому же POST-переменные не передаются между страничками. :(

    Сами странички у меня отображаются так:
    site.ru/index.php?act=news
    site.ru/index.php?act=register

    В общем, что делать, подскажите, уважаемые.
     
  11. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    D.Lans
    в шаблоне PHP код быть не должен.
     
  12. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    440hz
    Это ясно.
    В шаблоне у меня один дизайн.

    Вот мне и интересно - как осуществить взаимодействие PHP-кода и данной системы шаблонов?
    В моем случае.
     
  13. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    делаешь в шаблоне соответствующую перменную и парсишь туда. что не понятного-то?
     
  14. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    440hz
    хм.

    что-то я сомневаюсь что POST (насчет GET - не знаю) переменные будут передаваться при таком подходе.
     
  15. jсda

    jсda Guest

    Хм, немогу вникнуть в суть, зачем весь этот баян. Есть же smarty от самих PHP (http://smarty.php.net/) + русский мануал. Отлично решает все проблемы, логику можно разделить, но есть возможность и в шаблоне ее реализовать.
     
  16. svk

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

    С нами с:
    7 авг 2006
    Сообщения:
    506
    Симпатии:
    0
    Адрес:
    NetByNet
    лично меня абсолютно не устраивает смарти. За выходные написал собственный шаблонизатор, ничуть не уступающий смарти. а в некоторых задачах (возможно, важных только для меня) даже превосходит ее
     
  17. jсda

    jсda Guest

    Хм, интерестно, думаю что могу попробовать доказать что smarty, хорош во «всем» (долго с ним работаю уже...), давай говори чем он неустраивает тебя, может я тоже на него забью (кто знает, кто знает)...
     
  18. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Я сам юзаю смарти..... но сейчас реально задумываюсь от него отказываться в ряде проектов...... слишком тяжелый......
     
  19. svk

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

    С нами с:
    7 авг 2006
    Сообщения:
    506
    Симпатии:
    0
    Адрес:
    NetByNet
    у меня все проекты организованы так:
    PHP:
    1. <?php
    2. include('common.php');
    3. include('includes/header.php');
    4.  
    5. логика страницы
    6. $template->parse(); //парсинг шаблона "тела" страницы.
    7. include('includes/footer.php');
    8. ?>
    соответственно в хеадере футере тоже самое только без инклюдов. В смарти мне придется для каждой страницы создавать свой объект smarty, чтобы потом его вывести и убить. мало того что неудобно (нельзя передавать переменные из хеадера в футер кроме как в основном коде) так еще и несколько ресурсоемко. да и элементарно некрасиво
     
  20. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    svk
    в смарти можно так:
    PHP:
    1.  
    2. <?
    3. $html=$smarty->fetch("header.tpl");
    4. $html.="SOME CONTENT";
    5. $html.=$smarty->fetch("footer.tpl");
    6. echo $html;
    7. ?>
    8.  
     
  21. Mavir

    Mavir Guest

    Вообще-то не надо перемешивать логику и вывод. Все действия нужно выполнять до вывода шаблона. Соответсвенно все переменные будут доступны и header, и в body, и footer.

    Хотя я не использую разбиение страницы на три части. У меня отдельно шаблон всей страницы и только где информация изменяется, делаю вставки соответсвующих шаблонов.
    Например, для смарти будет так
    Код (Text):
    1. <html>
    2. <head>
    3.     <title>{$title}</title>
    4. </head>
    5. <body>
    6. Верх страницы (логотип, меню и т.д.)
    7.  
    8. {include file=$block}
    9.  
    10. Низ страницы
    11. </body>
    12. </html>
     
  22. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Так, плиз, давайте оффтопить насчет чем хорош или плох смарти в другой теме.

    Я пишу свой шаблонизатор, ибо когда пишешь свое:
    1. Знаешь как оно работает (можно подправить что-нить при необходимости). Не надо читать тонны мануалов.
    2. 99% возможностей смарти мне просто не нужны. Тогда зачем тоскать с собой лишний код?
    3. В конце концов - когда пишешь сам, невольно поднимается твой профессионализм, понимание PHP и т.д., чем когда юзаешь готовое.

    опять же - создайте отдельную тему и обсуждайте в ней смарти!

    Я по прежнему хочу услышать ответа на свой вопрос:

    как внедрять PHP код в данную систему шаблонов?
     
  23. Mavir

    Mavir Guest

    Можно так.
    PHP:
    1. <?
    2. include('file.php');
    3. ?>
    А потом значение переменной вставлять в нужное место в шаблоне.
     
  24. D.Lans

    D.Lans Активный пользователь

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Mavir ээ а где ты предполагаешь вставлять данный код?
    В index.php или template.php ?


    Кстать я понял почему у меня переменные не передавались - оказывается я невнимательно написал - вместо $_POST[''] - $_GET[''] :)
     
  25. Mavir

    Mavir Guest

    Это не я предлагал, а 440hz
    Естественно, в index.php. В шаблоне только выводишь, что сохранилось в переменной.