Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал Пишем свой шаблонизатор в 50 строк

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Евгеха19_93, 19 апр 2014.

  1. Автор темы
    Евгеха19_93

    Евгеха19_93 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    Xeleon
    Хелло, %username%!
    Скрипт, который мы сейчас напишем, я использую во всех своих скриптах, хотя он занимает всего 50 строк! И название ему - шаблонизатор. Итак, поехали!
    Создаем класс, назовем его `tpl`:
    PHP:
    <?php
    class tpl {

    ?>
    Так. Теперь добавим конструктор класса:
    PHP:
    <?php
    class tpl {
        function 
    __construct() { //Конструктор класса
            
    global $config$tpl_dir;
            
    $tpl_dir $config['tpls_dir'].'/'.$config['cur_tpl'].'/';
        }
    ?>
    Разберемся:
    3 строка: тут мы "глобалим" (получаем доступ из класса) переменные, которые будут использоваться.
    4 строка: собираем путь к папке с шаблоном. У меня он выглядит примерно так: templates/default/
    где `templates` - директория со всеми шаблонами, а default - название текущего шаблона.
    Окей, дальше.
    Делаем загрузку шаблона:
    PHP:
    <?php
    function load($a_file) {
            global 
    $a_cur_file$a_tpl_dir;
            
    $file $a_tpl_dir.$a_file;
            if(isset(
    $file)) {
            
    $_tplf fopen($file'r');
            if (
    $_tplf) { 
                while (!
    feof($_tplf)) {
                    
    $a_cur_file .= fgets($_tplf100);
                }
            
    fclose($_tplf);
            } else {
                die(
    '<br>Шаблон не найден!<br>');
            }
            }
        }
    ?>
    Особо разжевывать не буду, только скажу, что тут мы проверяем файл шаблона, и если он есть - подгружаем его.
    Так, шаблон мы загрузили (они, кстати, у меня храняться в расширении .tpl, а в папке с шаблонами лежит файл .htaccess, в котором стоит запрет на просмотр шаблона)
    Шаблон у меня выглядит следующим образом:
    HTML:
    <html>
    <body>
    {sometag}
    {moresometag}
    {sometag}
    </body>
    </html>
    Нам нужно вместо тегов сделать наш контент, например - "Hello, World!". Пишем ещё функцию:
    PHP:
    <?php
    function set($tag$target) {
            global 
    $a_cur_file;
            
    $a_cur_file str_replace($tag$target$a_cur_file);
        }
    ?>
    Тут мы глобалим шаблон (который уже подгружен) и заменяем в нем тег на контент.
    Итак, мы заменили все нужные теги, теперь нам нужно получить и вывести шаблон. Для этого у меня целая функция :D
    PHP:
    <?php
    function get() {
            global 
    $a_cur_file;
            return 
    $a_cur_file;
        }
    ?>
    Отмечу, что код хоть и с классами, но тут нет всяких там public и private переменных, потому что я не хотел заморачиваться.
    Отлично, все почти готово. Но давайте добавим ещё одну функцию - подгрузка шаблона в шаблон. Да-да, все правильно, рекурсия, но все же. Это позволит нам сделать отдельный шаблон `sidebar` и подгружать его в нужные страницы (которые так же являются шаблонами). Пишем:
    PHP:
    <?php
    function loadnset($file_tag$a_pl_file) {
            global 
    $a_cur_file$a_tpl_dir;
            
    $file $a_tpl_dir.$a_pl_file;
            if(isset(
    $file)) {
            
    $_tplf fopen($file'r');
            if (
    $_tplf) {
                while (!
    feof($_tplf)) {
                    
    $a_add_file .= fgets($_tplf100);
                }
            
    fclose($_tplf);
            } else {
                die(
    '<br>Шаблон не найден!<br>');
            }
            }
            
    $a_cur_file str_replace($file_tag$a_add_file$a_cur_file);
        }
    ?>
    Тут мы указываем файл шаблона и его тег в родительском шаблоне. Название функции = load and set, так что не пугайтесь :D
    Все, наш шаблонизатор готов! Кстати, если убрать функцию loadnset (в некоторых моих скриптах её нет), то шаблонизатор займет всего 30 строк! (на 40% меньше! Не 20%, конечно, как любил Стив.. Даже лучше :D )
    Ладно, мы написали класс, но как его использовать? Очень просто! Вот так:
    PHP:
    <?php
    $tpl  
    = new tpl();
    $tpl->load('index.tpl'); //Загружаем шаблон
    $tpl->set('{sometag}''Hello, World!'); //Заменяем тег на надпись
    $tpl->loadnset('{moresometag}''sidebar.tpl'); //Подгружаем дочерний шаблон
    //Все, теперь выводим шаблон:
    print $tpl->get();
    //или
    echo $tpl->get();
    //Кому как нравиться
    //Все!
    ?>
    Спасибо за то, что прочитал, надеюсь тебе это понадобиться :D
     
    LakkaAlon, FuturWall и DoG743 нравится это.
  2. Хостинг MineCraft
    <
  3. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Лучше smarty юзать, чем этот велосипед. Гибкости - 0 как и в длешном шаблонизаторе.
     
  4. Автор темы
    Евгеха19_93

    Евгеха19_93 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    Xeleon
    Не очень люблю юзать готовые решения, которые и самому можно за 5 минут реализовать.
    Дело ваше, я просто написал как я это делал.
     
  5. AlexMerser

    AlexMerser Старожил Пользователь

    Баллы:
    173
    Шаблонизатор дле урезаная версия. И где тут свое?
     

Поделиться этой страницей