Эта справка служит помочь понять некоторые аспекты шаблонизатора. И в первую очередь того, как расширить его функциональность.
Переменные (${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));