Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Свой шаблонизатор


Автор: OlegNT 25.3.2006, 22:01
Здравствуйте!

Хороший тут у вас форум. Спасибо другу, что позвал сюда =)

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

Пока шаблонизатор умеет склеивать файлы, заменять переменные {BLABLABLA}, а также удалять блоки:

<!-- BEGIN block_name -->
Тело блока
<!-- END block_name -->

Хочу еще сделать повторение блоков. И как-то организовать блок в блоке. Но это потом.

Автор: Ciber SLasH 25.3.2006, 22:17
Посмотри как другие делали такое: http://forum.vingrad.ru/index.php?showtopic=44503&view=findpost&p=395070

Автор: RomanK 25.3.2006, 23:54
OlegNT, я вот тоже написал собственный шаблонизатор. Я его написал для себя. Знаю что существует достаточно много других шаблонных движков, но мне гараздо ближе свое. Тем более писал его для преобретения опыта в этом деле. И навязывать его никому не хочу. Я его написал давно... НО: он требует небольшой доработки. Там есть небольшой глюк при парсинге блоков сложной вложенности. Но это не очень мешает. С использованием этого шаблонизатора я сделал уже один проект... кому интересно, могу дать ссылку.

Ну а теперь немного о том как он работает:
Код

<?php
$tpl=new ParseTemplates('.', 1); // Назначаем каталог с шаблонами. В данном случае это текущий каталог. Второй параметр - это режим отладки (вкл/выкл).

$tpl->SetFile('Main', 'main.tpl'); // Назначаем файл шаблона.

// Сразу можем назначить шаблонные переменные:
$tpl->SetVars
(
    'Main', // Шаблон, для которого назначаем переменные.
    array
    (
        'key1'=>'value1', // Переменная => Значение. То есть в шаблоне замениться переменная @key1@ на 'value1'.
        'key2'=>'value2'
    )
);

// Далее можем повторить определенный блок несколько раз.
for($i=0; $i<10; $i++)
{
    // Для каждого блока можем назначть свои переменные.
    $tpl->SetVars
    (
        'Main:block', // Блок, для которого назначаем переменные.
        array
        (
            'key1'=>'value1',
            'key2'=>'value2'
        )
    );
    // Можем назначить вложенный блок и тоже его повторить несколько раз.
    for($j=0; $j<5; $j++)
    {
        $tpl->SetVars
        (
            'Main:block/subblock',
            array
            (
                'key1'=>'value1',
                'key2'=>'value2'
            )
        );
        $tpl->Parse('Main:block/subblock'); // Парсим subblock.
    }
    $tpl->Parse('Main:block'); // Парсим block.
}

// Ну в принципе и все, выводим на экран (если были назначены несколько файлов, то они выведутся (отпарсенные) в порядке из назначения):
$tpl->Display_();
// Или возвращаем в переменную:
$html=$tpl->Return_();

// Так же существует возможность вставить один файл шаблона внутрь другого заменив какую-либо шаблонную переменную.
?>

Если еще что-нибудь интересно, спрашивай. smile

Автор: AntonioBanderaz 26.3.2006, 10:26
на самом деле очень похоже на шаблонизатор в пакете PEAR... Зачем переписывать если за тебя это уже сделали, и довольно качественно... Ты же ничего нового не придумал.... )))

Автор: RomanK 26.3.2006, 13:42
AntonioBanderaz, если Вы намекаете, что я из PEAR что-то содрал, так Вы глубоко ошибаетесь.
Цитата(AntonioBanderaz @ 26.3.2006, 10:26 Найти цитируемый пост)
Зачем переписывать если за тебя это уже сделали, и довольно качественно... Ты же ничего нового не придумал.... )))

Блин. Это опять из той области типа "зачем изоретать колесо". Так вот что я Вам скажу. Я на тот момент знал, что существует большое количество этих шаблонных движков. Но, мне хотелось написать это самому, просто для приобретения опыта. smile И у меня это получилось. Думаю, что довольно неплохо, хотя может и работает он не так быстро, как какие-нибудь FastTemplates или XTemplates. Правда возможно и наоборот, так как скорость работы я не сравнивал.
Так же я понимаю OlegNT`a. Думаю он тоже это делает ради практики. smile

Автор: OlegNT 26.3.2006, 14:22
Цитата(RomanK @ 26.3.2006, 16:42 Найти цитируемый пост)
Так же я понимаю OlegNT`a. Думаю он тоже это делает ради практики.

Да, вы правы.

Первоначально я увидел систему шаблонов в phpBB. Там есть, естественно, шаблонизатор, но, честно сказать, я в нем так и не разобрался. Поэтому решил сделать что-то свое

Автор: RomanK 26.3.2006, 14:32
Цитата(OlegNT @ 26.3.2006, 14:22 Найти цитируемый пост)
но, честно сказать, я в нем так и не разобрался

А, честно, даже не разбирался. smile Там помойму FastTemplates и стоит. Хотя точно не знаю. Просто где-то слышал. smile Единственно на что я смотрел при разработке своего шаблонного движка, так это примеры работы XTemplates.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)