Расширения Piles

Эта справка служит помочь понять некоторые аспекты шаблонизатора. И в первую очередь того, как расширить его функциональность.

Переменные

Переменные (${some}) можно расширить двумя способами: 1) типами; 2) модифицировав переменные. Для этого достаточно создать PHP-файл в директории ext с функцией со специальным префиксом. Для типов это префикс type, для модиикации переменных — var.

Добавляем тип

function type_bold($value){
    return '<b>'.$value.'</b>';
}

$var = 'Test';
$text = 'Is a simple $bold{var}.';

// Is a simple <b>Test</b>.
print_r(piles::show($text, compact('var')));

Добавляем модификатор переменной

function var_array($string, $vars){
    return '<b>'.$string.'</b> == '.$vars['array'][$string];
}

$array = array(
    'key1' => 'Value #1',
    'key2' => 'Value #2',
    'key3' => 'Value #3',
);
$text = 'Is a simple ${array.key2}.';

// Is a simple <b>key2</b> == Value #2.
print_r(piles::show($text, compact('array')));

Первый параметр функции var_array() — $string это название переменной. Второй — $vars — список всех переменных.

В названиях функций можно использовать специальные символы.

function var__tilde_mul($string, $vars){
    return '['.$string.'] '.($vars[$string] * 2);
}

$test = 22;
$text = '22 * 2 = ${@mul.test}.';

// 22 * 2 = [test] 44.
print_r(piles::show($text, compact('test')));

Спец. символы

Знак Слово Название
& _ampersand_ Амперсанд.
@ _at_ Собака.
* _asterisk_ Звёздочка.
^ _caret_ Циркумфлекс.
# _octothorp_ Решётка.
$ _dollar_ Знак доллара.
% _percent_ Знак процента.
/ _slash_ Слеш.
+ _plus_ Плюс.
- _minus_ Минус.

Теги

Пользовательские теги это функции с префиксов tag_. Таким же образом можно перебить и обычные HTML-теги — создав функцию, например, tag_div().

Пример

function tag_simple($attr){
    return 'simple [attr param: '.$attr['param'].']';
}

$text = 'Simple: <simple param="one" />.';

// Simple: simple [attr param: one].
print_r(piles::show($text));

Атрибуты

Можно создавать свои атрибуты. Они будут доступны всем тегам: пользовательским и стандартным.

Пример

function attr_param($attr){
    if ($attr['param'] == 1)
        $attr['newparam'] = 'New';

    return $attr;
}

$text = 'Test <b param="1">attribute</b>. Test <i param="2">attribute</i>.';

// Test <b param="1" newparam="New">attribute</b>. Test <i param="2">attribute</i>.
print_r(piles::show($text));

Если в расширении аттрибута задать ключ #skip, то шаблонизатор вырежит тег и его содержание.

function attr_param($attr){
    if ($attr['param'] == 1)
        $attr['#skip'] = true;

    return $attr;
}

$text = 'Test <b param="1">attribute</b>. Test <i param="2">attribute</i>.';

// // Test . Test <i param="2">attribute</i>.
print_r(tags::parse($text));

А если тип ключа #skip будет отличным от буливого (true/false), то шаблонизатор заменит тег и его содержание на содержание #skip.

function attr_param($attr){
    if ($attr['param'] == 1)
        $attr['#skip'] = '[skipped]';

    return $attr;
}

$text = 'Test <b param="1">attribute</b>. Test <i param="2">attribute</i>.';

// // Test [skipped]. Test <i param="2">attribute</i>.
print_r(tags::parse($text));