include

(blitz >= 0.1)

include — подключить шаблон

string include ( string tpl )

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