(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 добавляются к уже установленным параметрам шаблона, и уже после этого происходит выполнение кода, поэтому ничего удивительного в таком поведении нет. Эту особенность следует иметь в виду, чтобы случайно не «затереть» ранее установленную переменную.