(blitz >= 0.1)
include — подключить шаблонПример 21. include
1.tpl
Мама {{ include('other.tpl') }} раму2.tpl
мыла
<?
$T = new Blitz('tpl');
echo $T->parse();
echo "\n";
?>Мама мыла раму
Если вы включаете один шаблон в другой, то включаемый шаблон наследует все переменные внешнего шаблона.
Пример 22. include: наследование всех переменных внешнего шаблона
1.tpl
переменная a = {{ $a }}
внутренний шаблон: {{ include('other.tpl') }}
переменная b = {{ $b }}2.tpl
/* переменная a = {{ $a }}, переменная b = {{ $b }} */<?
$T = new Blitz('tpl');
$T->set(array('a' => 'a_value', 'b' => 'b_value'));
echo $T->parse();
echo "\n";
?>переменная a = a_value внутренний шаблон: /* переменная a = a_value, переменная b = b_value */ переменная b = b_value
Пример 23. Иcпользование встроенного метода include лучше создания наследников Blitz лишь ради include
1.tpl
parent value: {{ $parent_val }}
child_value: {{ $child_val }}
===========================================================
{{ test_include }}
===========================================================
parent value: {{ $parent_val }}
child_value: {{ $child_val }}2.tpl
parent method: {{ my_test }}
child value: {{ $child_val }}
parent value: {{ $parent_val }}<?
class BlitzTemplate extends Blitz {
var $titem;
function BlitzTemplate($t,$titem) {
parent::Blitz($t);
$this->set(array('parent_val' => 'some_parent_val'));
$this->titem = $titem;
}
function my_test() {
return 'user method called ('.__CLASS__.','.__LINE__.')';
}
function test_include() {
$result = '';
while($i++<3) {
$result .= $this->include($this->titem,array(
'child_val' => 'i_'.$i
));
}
return $result;
}
}
$T = new BlitzTemplate('tpl','other.tpl');
echo $T->parse();
?>parent value: some_parent_val child_value: =========================================================== parent method: user method called (blitztemplate,13) child value: i_1 parent value: some_parent_val parent method: user method called (blitztemplate,13) child value: i_2 parent value: some_parent_val parent method: user method called (blitztemplate,13) child value: i_3 parent value: some_parent_val =========================================================== parent value: some_parent_val child_value: i_3
При первой обработке шаблона структура всех его тэгов сохраняется, поэтому при последующих вызовах шаблон снова не анализируется. Обратите внимание на то, что до выполнения метода test_include переменная child_value пуста и не «видна» в шаблоне, но после выполнения видна и содержит последнее установленное значение. Это поведение аналогично тому, что происходит при выполнении php-кода, если бы вместо test_include у нас был include некоторого php-файла, внутри которого бы инициализировалась новая переменная. Внутри внешнего кода до include она имела бы неопределенное значение, но после - уже нет. На самом деле при вызове include сначала все параметры вызова include добавляются к уже установленным параметрам шаблона, и уже после этого происходит выполнение кода, поэтому ничего удивительного в таком поведении нет. Эту особенность следует иметь в виду, чтобы случайно не «затереть» ранее установленную переменную.