Класс для работы с шаблонами.
Мне нравится HTML поэтому сделал шаблонизатор, шаблоны которого выглядят как обычный HTML, так же парсятся и так же работают. Жертва скорости (относительно, конечно) в пользу собственной удобности.
<? if ($reviews) { ?>
<? foreach ($reviews as $review){ ?>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;">
<b>${review.author}</b> |
<img src="catalog/view/theme/default/image/stars_${review.rating}.png" alt="${review.stars}" /><br />
${review.date_added}<br /><br />
${review.text}
</div>
<? } ?>
<div class="pagination">${pagination}</div>
<?php /* для примера */ } else { ?>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;"></div>
<? } ?>
Каждый элемент — часть шаблонизатора: короткие и полные PHP-теги, обычные переменные ($review,
Парсит шаблон. Можно указать файл (лежащий в папке mod/, ext/ или lib/, например, tag.msg.i это ext//msg/i.phtml) или текст. Вторым параметром может быть передан массив переменных видимые внутри шаблона.
function tag_my_first_tag($attr){
return '[tag_my_first_tag] '.$attr['#text'];
}
function tag_my_second_tag($attr){
return str_replace('[tag_my_first_tag]', '[replaced]', $attr['#text']);
}
$text = 'Some ${test} text <my_second_tag>
and text here
<my_first_tag>and <b>here</b> some text</my_first_tag>
</my_second_tag>.';
$vars = array('test' => 'Hello');
print_r(piles::show($text, $vars));
/* Some Hello text
and text here
[replaced] and <b>here</b> some text
. */
Третим параметром можно передать список доступных тегов и атрибутов.
$text = '
Text with <b attr="work?">Bold</b>, <i style="color: red;" attr="work?">Italic</i>
and <big attr="work?">Big</big>.
';
$allowed = array(
'b', // разрешаем использовать тег B
'i' => array('style'), // размерашем использовать тег I и присваивать ему атрибт style
// '?', // так можно разрешить PHP-тег - <? тут код ?>
// '$', // а так - переменные
);
print_r(piles::show($text, array(), $allowed));
/* Text with <b>Bold</b>, <i style="color: red; ">Italic</i>
and <big attr="work?">Big</big>. */
Заполняет тег данными из массива.
$array = array(
'param1' => 'Value #1',
'param2' => 'Value #2'
);
// <test_tag param1="Value #1" param2="Value #2" />
print_r(piles::fill('test_tag', $array));
// или
$array = array(
'#tag' => 'test_tag',
'param1' => 'Value #1',
'param2' => 'Value #2'
);
// <test_tag param1="Value #1" param2="Value #2" />
print_r(piles::fill($array));
Экранизатор символов.
Строит переменную. Вторым параметром можно задать неймспейс.
// $key['subkey']['sussubkey']
print_r(piles::varname('key.subkey.sussubkey'));
// $_POST['field']
print_r(piles::varname('_post.field'));
// $this->vars['key']['subkey']['sussubkey']
print_r(piles::varname('key.subkey.sussubkey', '$this->vars'));
Переводит названия полей в форме к виду переменных шаблонизатора.
// form.name.sub\.name
print_r(piles::name2var('form[name][sub.name]'));
Обратное предыдущему.
// form[name][sub.name]
print_r(piles::var2name('form.name.sub\.name'));
Получает группу атрибутов.
$array = array(
'some' => 1,
'pre_key1' => 2,
'pre_key2' => 3
);
print_r(piles::attr_group('pre', $array));
/* Array
(
[key1] => 2
[key2] => 3
) */