[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Class - как сделать свой шаблонизатор
Extremal
Всем привет=)
В общем пишу уже в который раз свой двиг,и сейчас хочу сделать как во многих популярных движках что бы при вставлении {title},{login} и т.д. в скин выводилась нужное,понимаю что можно делать типа <? $row['title']; ?> и т.д.,но хочется что бы все было легче=)Как писать классы я образно знаю,можно вывести типа $class->tpl('title'); но этот вариант меня тоже не устраивает когда можно еще короче,вот хотелось бы узнать как laugh.gif

_____________
sergeiss
Я так понял, что ты хочешь сделать свой шаблонизатор? А зачем - можно поинтересоваться, чем тебя не устраивают уже перечисленные тобой возможности? Ведь создание своего шаблонизатора - это нелегкая (и бесполезная) работа.

И второе - п.2.3.с Правил форума прямо требует давать осмысленые названия. Поэтому я изменил название твоей темы на более подходящее твоему вопросу.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
mihai
sergeiss
а почему бесполезная
haZe
sergeiss, пишут свои шаблонизаторы только те, кому лень ковырять готовые или мего крутые люди, шаблонизаторы которых потом расходятся по миру или глупцы, которые не понимают, что у них не выйдет ничего приличного или те кому нужен какой-то свой функционал. Больше вариантов я не придумал.
С другой стороны написание свое шаблонизатора, считаю хороший практикой в логике, в РНР, работе со строками и пр.
Я сам сейчас дописываю шаблонизатор и благодаря kirik-у научился некоторым вещам, спасибо ему большое. Но я сюда пришел с конкретной проблемой, а не с темой "Ой, шота мне делать нефига, напишу ка я шаблонизатор, пацаны, шо надо делать".
Extremal, если тебе все еще это интересно, напиши мне в личку, я пытаюсь статью написать, о том как писать шаблонизатор.
sergeiss
mihai - потому что он потратит кучу времени на написание и отладку, а результатом будет простой "пшик". Если очень хочется извратов - то есть уже готовые, отлаженные шаблонизаторы. Зачем изобретать велосипед, который заведомо будет хуже того, который легко приобрести?

Кстати, пример из моей жизни smile.gif biggrin.gif На тему того, что не надо изобретать велосипед
Однажды, года 3-4 тому назад, мне надо было заменить ступичный подшипник на своем автомобиле (тогда у меня был ИЖ-2126, а этот узел у него от вазовской девятки).
Зашумел левый подшипник. Я купил сразу два, чтобы заменить оба, и правый, и левый.
Менял, менял... При установке раздолбал новый, поставил нормально только второй. "Убил" целый день. Естественно, на правой стороне ничего не менял.
Но знаешь, как было обидно, когда узнал, что стоимость работ по замене такого подшипника примерно равна его стоимости? rolleyes.gif То есть, я мог те же деньги потратить на закупку одного подшипника и его замену в сервисе. Это было бы намного быстрее, и я бы не отбил себе все руки. За те же деньги, что я потратил.
А ведь как раз хотел съэкономить за счет работ. Мол, самостоятельно дешевле будет...

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
А я вот написал свой шаблонизатор. И считаю его лучшим в мире biggrin.gif
Дело в том, что я вообще их на дух не переношу. Однако нативе-синтаксис тоже не очень красив, потому что сложен для верстальщика.
Я вот придумал как совместить одно с другим. И вроде получилось.

А весь "шаблонизатор занимает всего две функции на несколько строк. smile.gif
PHP
<?php
    
function get_tpl($tpl)
    {    
          return 
file_get_contents(SETUP_DIR .'/skins/'SKIN .'/'$tpl .'.html');
    }

    function 
parse_tpl($cont$data)
    {
        foreach(
$data as $key => $value)
        $
$key $value;

        
preg_match_all("#<\?php(.*?)\?>#uis",$cont,$codes);

        
$count count($codes[0]);

        if(
$count)
            for(
$i 0$i $count; ++$i)
            {
            
ob_start();
            eval(
$codes[1][$i]);
            
$echo ob_get_contents();  
            
ob_end_clean();
            
$cont str_replace($codes[0][$i],$echo,$cont);
            }    
    return 
$cont;
    }

В чем его прикол - он работает с простым php синтаксисом, но позволяет обрабатывать шаблоны в циклах. То есть если код простой, на уровне <?php echo $var; ?> то он нафиг не нужен. А если посложнее, с циклами, то он очень кстати.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.