21 const parent =
'____SMARTY_BLOCK_PARENT____';
79 $_name = trim($_attr[
'name'],
"\"'");
82 if (isset($compiler->template->block_data[$_name]) && $compiler->template->block_data[$_name][
'mode'] ==
'replace') {
83 $_attr[
'append'] =
false;
84 $_attr[
'prepend'] =
false;
88 if ($compiler->inheritance_child) {
89 array_unshift(self::$nested_block_names, $_name);
91 self::$block_data[$_name][
'source'] =
92 "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" .
93 " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}";
94 if ($_attr[
'nocache']) {
95 self::$block_data[$_name][
'source'] .=
' nocache';
97 self::$block_data[$_name][
'source'] .= $compiler->smarty->right_delimiter;
99 $save = array($_attr, $compiler->inheritance);
100 $this->
openTag($compiler,
'block', $save);
102 $compiler->inheritance =
true;
104 $compiler->has_code =
false;
108 if ($_attr[
'nocache'] ==
true) {
109 $compiler->tag_nocache =
true;
111 $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache);
112 $this->
openTag($compiler,
'block', $save);
113 $compiler->inheritance =
true;
114 $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
117 $compiler->has_code =
false;
132 if ($compiler->inheritance_child) {
134 if (isset($compiler->template->block_data[$name1])) {
140 $compiler->has_code =
false;
144 if ($_name == null) {
145 $stack_count = count($compiler->_tag_stack);
146 while (-- $stack_count >= 0) {
147 if ($compiler->_tag_stack[$stack_count][0] ==
'block') {
148 $_name = trim($compiler->_tag_stack[$stack_count][1][0][
'name'],
"\"'");
153 if ($_name == null) {
154 $compiler->trigger_template_error(
' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno);
157 if (!isset($compiler->template->block_data[$_name][
'source'])) {
158 $compiler->popTrace();
162 $compiler->template->block_data[$_name][
'compiled'] =
true;
163 $_tpl =
new Smarty_Internal_template(
'string:' . $compiler->template->block_data[$_name][
'source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id,
164 $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime);
165 if ($compiler->smarty->debugging) {
168 $_tpl->tpl_vars = $compiler->template->tpl_vars;
169 $_tpl->variable_filters = $compiler->template->variable_filters;
170 $_tpl->properties[
'nocache_hash'] = $compiler->template->properties[
'nocache_hash'];
171 $_tpl->allow_relative_path =
true;
172 $_tpl->compiler->inheritance =
true;
173 $_tpl->compiler->suppressHeader =
true;
174 $_tpl->compiler->suppressFilter =
true;
175 $_tpl->compiler->suppressTemplatePropertyHeader =
true;
176 $nocache = $compiler->nocache || $compiler->tag_nocache;
177 if (strpos($compiler->template->block_data[$_name][
'source'], self::parent) !==
false) {
178 $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler));
179 } elseif ($compiler->template->block_data[$_name][
'mode'] ==
'prepend') {
180 $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler) . $compiler->parser->current_buffer->to_smarty_php();
181 } elseif ($compiler->template->block_data[$_name][
'mode'] ==
'append') {
182 $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler);
183 } elseif (!empty($compiler->template->block_data[$_name])) {
184 $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache, $compiler->parent_compiler);
186 $compiler->template->properties[
'file_dependency'] = array_merge($compiler->template->properties[
'file_dependency'], $_tpl->properties[
'file_dependency']);
187 $compiler->template->properties[
'tpl_function'] = array_merge($compiler->template->properties[
'tpl_function'], $_tpl->properties[
'tpl_function']);
188 $compiler->template->variable_filters = $_tpl->variable_filters;
189 if ($_tpl->has_nocache_code) {
190 $compiler->template->has_nocache_code =
true;
192 foreach ($_tpl->required_plugins as $key => $tmp1) {
193 if ($compiler->nocache && $compiler->template->caching) {
198 foreach ($tmp1 as $name => $tmp) {
199 foreach ($tmp as $type => $data) {
200 $compiler->template->required_plugins[$code][$name][$type] = $data;
205 $compiler->has_code =
true;
220 if ($_name == null) {
221 $stack_count = count($compiler->_tag_stack);
222 while (-- $stack_count >= 0) {
223 if ($compiler->_tag_stack[$stack_count][0] ==
'block') {
224 $_name = trim($compiler->_tag_stack[$stack_count][1][0][
'name'],
"\"'");
229 if ($_name == null) {
230 $compiler->trigger_template_error(
' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno);
233 $compiler->trigger_template_error(
' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno);
237 $compiler->has_code =
false;
271 $compiler->has_code =
true;
274 $saved_data = $this->
closeTag($compiler, array(
'block'));
275 $_name = trim($saved_data[0][
'name'],
"\"'");
277 $compiler->inheritance = $saved_data[1];
279 if ($compiler->inheritance_child) {
285 if (isset($compiler->template->block_data[$name1]) || !$saved_data[0][
'hide']) {
289 if ($compiler->template->block_data[$name1][
'mode'] ==
'append') {
291 } elseif ($compiler->template->block_data[$name1][
'mode'] ==
'prepend') {
301 if (isset($compiler->template->block_data[$name1]) || !$saved_data[0][
'hide']) {
304 $compiler->template->block_data[$name1][
'source'] =
306 } elseif ($compiler->template->block_data[$name1][
'mode'] ==
'prepend') {
308 } elseif ($compiler->template->block_data[$name1][
'mode'] ==
'append') {
314 $compiler->template->block_data[$name1][
'mode'] =
'replace';
315 if ($saved_data[0][
'append']) {
316 $compiler->template->block_data[$name1][
'mode'] =
'append';
318 if ($saved_data[0][
'prepend']) {
319 $compiler->template->block_data[$name1][
'mode'] =
'prepend';
325 $compiler->has_code =
false;
328 if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name][
'compiled'])) {
331 if ($saved_data[0][
'hide'] && !isset($compiler->template->block_data[$_name][
'source'])) {
334 $_output = $compiler->parser->current_buffer->to_smarty_php();
337 if (isset($compiler->template->block_data[$_name][
'compiled'])) {
338 unset($compiler->template->block_data[$_name][
'compiled']);
341 $compiler->parser->current_buffer = $saved_data[2];
342 if ($compiler->nocache) {
343 $compiler->tag_nocache =
true;
345 $compiler->nocache = $saved_data[3];
347 $compiler->suppressNocacheProcessing =
true;
384 if (trim($_attr[
'type'],
"'") ==
'file') {
385 $compiler->template->template_resource =
'file:' . realpath(trim($_attr[
'file'],
"'"));
387 $compiler->template->template_resource = trim($_attr[
'resource'],
"'");
390 unset ($compiler->template->source);
391 $exists = $compiler->template->source->exists;
394 if ($_attr[
'nocache'] ==
true) {
395 $compiler->tag_nocache =
true;
397 $save = array($_attr, $compiler->nocache);
400 $compiler->pushTrace(trim($_attr[
'file'],
"\"'"), trim($_attr[
'uid'],
"\"'"), $_attr[
'line'] - $compiler->lex->line);
402 $this->
openTag($compiler,
'private_child_block', $save);
404 $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
405 $compiler->has_code =
false;
433 $saved_data = $this->
closeTag($compiler, array(
'private_child_block'));
436 $compiler->popTrace();
438 $compiler->nocache = $saved_data[1];
439 $compiler->has_code =
false;