Авторские статьи Разработка шаблонов на php

Discussion in 'Статьи' started by p-range, 20 Dec 2006.

  1. p-range

    p-range Elder - Старейшина

    Joined:
    5 Feb 2006
    Messages:
    137
    Likes Received:
    145
    Reputations:
    118
    # Вступление.

    Доброго времени суток.
    В этой статье я хочу рассказать об реализации шаблонов в php. Хоть идея не нова, но я решил описать принцып этого метода на примере своего движка..
    Для начала скажу что тот пример который я опишу в этой статье является не очень удобным для крупных web-приложений, а как раз подходит для маленьких движков.

    # Использование шаблонов.

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

    # Реализация.

    Итак, для начала создадим 3 файла:
    index.php [главная страница]
    main.class.php [класс шаблонизатора]
    main.tpl [файл шаблона]

    Исходник main.class.php

    Пройдемся по функциям скрипта.

    * Функции start() и end() - функции подсчитывающие время выполнения скрипта.

    * Функция parse принимает 2 значения. Это файл шаблона (main) и массив спецтэгов {TITLE, {DATE}, {TEXT}. Она заменяет тэги вида {TAG} на установленные значения.
    Итак, главный класс готов. Теперь напишем основной файл, который будет вызывать все эти функции и выдавать результат на страницу.

    Исходник index.php
    Это скрипт, запускающий класс и выводящий результат его работы на экран.

    Теперь заполним файл main.tpl

    Исходник main.tpl

    Тут приведен обычный HTML код. В данном файле можно найти переменные вида {TITLE}. Это как раз именно те переменные которые мы будем заменять на нужное нам значение.

    # Заключение.
    В этой статье я описал как можно быстро написать свой простенький шаблонизатор.
    Надеюсь что статья будет вам полезна.
     
    #1 p-range, 20 Dec 2006
    Last edited by a moderator: 2 Jan 2007
    4 people like this.
  2. antiforum

    antiforum New Member

    Joined:
    21 Nov 2006
    Messages:
    9
    Likes Received:
    1
    Reputations:
    0
    Неплохая статья.
     
  3. M-K

    M-K New Member

    Joined:
    16 Aug 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    1
    Статья хорошая. Но это только НАЧАЛО. Отправная точка. Очень хотелось посмотреть примеры применения или более сложные шаблонизаторы, о которых упоминалось общими словами в начале статьи.
     
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    antiforum, M-K, мне интересно, говоря "хорошая статья" вы на чём основывались? Статья (я бы это так и не называл), пускай не "говно", но всё равно - мусор.

    p-range, то что ты сотворил никакой не шаблонизатор... Обычный парсер с заменой, который в реальной жизни не найдёт никакого применения... Нету циклических интераций, нету условных итераций... А использование ООП-парадигмы и глобальных переменных это вообще нонсенс... Радует, конечно, что человек обладает некоторыми знаниями в PHP, но не стоит бросаться и "релизить" вышепреведённый детский сад... Всё имхо...
     
  5. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    А зачем такое делать, если можно воспользоваться PHP в качестве шаблонизатора? 0_0

    Или даже так: <?=$someVar?>, но такое лучше не делать, не везде работает.
     
  6. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    nerezus, что значит не везде работает? Всё норм...

    p-range, учитесь! Дёшево и сердито, и прикопаться не к чему...
     
  7. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Да, вот nezerus хорошо написал. Я сам сайт с такими шаблонами делал и он у меня отлично работал. А из статьи p-range я научился разве что gZip использовать = )
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Значит именно то, что значит.
    А еще конкретнее: <? ... ?> работает не везде. Надо юзать <?php ... ?>
     
  9. itsme

    itsme New Member

    Joined:
    14 Aug 2007
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    to groundhog

    если в php.ini отключена директива:

    short_open_tag

    короткий тег работать не будет.
     
  10. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    даже блоков нету. какой нафиг шаблонизатор.
     
  11. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    nerezus, ну ты меня прям дураком выставил... :) Эта херня по умолчанию включена, ясен пень если выключить, то и работать не будет... :) С таким же успехом можно сказать "работает не везде, только там где есть поддержка PHP"...
     
  12. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    нет, это разные вещи.
     
  13. А®ТеS

    А®ТеS Active Member

    Joined:
    25 Nov 2006
    Messages:
    198
    Likes Received:
    193
    Reputations:
    41
    Я на PHP не специализируюсь, но там вроде есть шаблоны FastTemplate и Smarty, смысл статьи неясен :(
     
    1 person likes this.
  14. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Уважаю smarty. В последнее время пишут странички\модули базирующиеся на phpbb. Так вот в phpbb довольно простой шаблонизатор, но в то же время всё что нужно в нём есть: блоки, вывод данных из массива, etc.
     
  15. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    phpbb шаблонизатор? Я понимаю, если бы его фреймворком назвали или ещё как-то... Но шаблонизатор... :) Это несколько унижает достоинства phpbb... :)
     
  16. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Учимся читать. 1-ого сентября обратно в школу.
     
  17. ENFIX

    ENFIX Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    175
    Likes Received:
    122
    Reputations:
    75
    на диске у себя нашел, не помню уже откуда -) Сам часто пользуюсь... Мб кому надо
    PHP:
    <?
    /***************************************************************
    Template class for splitting code and design
    ****************************************************************
    Usage:

    //creating an object
    $Template=new Template("path/to/template.tpl");
    //or $Template=new Template("template string",1);

    //assigning variables
    $Template->a("CONTENT", "This is the Template class test!");

    //printing
    $Template->p();

    also it's possible to get parsed text without printing it:
    $content=Template->parse();
    ****************************************************************/

    class Template{
        
        
    //constructor
        
    function Template($path$from_str=0){

            
    $this->error="";
            
            if(!
    $from_str){
                
                if(!
    file_exists($path)){
                    
    $this->error="File not found: <b>{$_SERVER[BASE_URL]}/$path</b>";
                    
    //$this->str=$this->error;
                    
    return 0;
                }
    //end if

                
    $str=join(""file($path));

            }else{
    //if(!$from_str)

                
    $str=$path;

            }
    //end if

            
    $this->str=$str;

            return 
    1;

        }
    //end of constructor function

        //assign
        
    function a($var$value){
            
    $this->vars[$var]=$value;
        }
    //end of assign function

        //parse
        
    function parse(){
            
    $this->parsed_str=$this->str;
            if(isset(
    $this->vars))
            foreach(
    $this->vars as $k=>$v){
                
    $this->parsed_str=str_replace('%'.$k.'%'$v$this->parsed_str);
            }
            return 
    $this->parsed_str;
        }
    //end of parse function

        //print
        
    function p(){
            echo 
    $this->parse();
        }
    //p
        
        
    function dieIfError(){
            if(
    $this->error)die($this->error);
        }
    //dieIfError

    }//end of class description
    ?>
     
  18. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Не слушаю я советы тех кодеров, которые даже с отсупами еще писать не приучились :) Ибо ИМХО нету бывал кодеров, которые пишут без отсупов :)

    За идею реализации +1, за старания +1, за код -1 :)