/test/distributions/smarty/3.2dev/libs/sysplugins/smarty_internal_compile_private_registered_block.php
https://github.com/rodneyrehm/php-template-engines · PHP · 126 lines · 77 code · 6 blank · 43 comment · 32 complexity · 0d58ea55f33e426c4bb8516dee1e03f8 MD5 · raw file
- <?php
-
- /**
- * Smarty Internal Plugin Compile Registered Block
- *
- * Compiles code for the execution of a registered block function
- *
- * @package Smarty
- * @subpackage Compiler
- * @author Uwe Tews
- */
-
- /**
- * Smarty Internal Plugin Compile Registered Block Class
- *
- * @package Smarty
- * @subpackage Compiler
- */
- class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase {
-
- /**
- * Attribute definition: Overwrites base class.
- *
- * @var array
- * @see Smarty_Internal_CompileBase
- */
- public $optional_attributes = array('_any');
-
- /**
- * Compiles code for the execution of a block function
- *
- * @param array $args array with attributes from parser
- * @param object $compiler compiler object
- * @param array $parameter array with compilation parameter
- * @param string $tag name of block function
- * @return string compiled code
- */
- public function compile($args, $compiler, $parameter, $tag) {
- if (!isset($tag[5]) || substr($tag, -5) != 'close') {
- // opening tag of block plugin
- // check and get attributes
- $_attr = $this->getAttributes($compiler, $args);
- if ($_attr['nocache']) {
- $compiler->tag_nocache = true;
- }
- unset($_attr['nocache']);
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
- $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
- } else {
- $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
- }
- $function = $tag_info[0];
- // convert attributes into parameter string
- $par_string = $this->getPluginParameterString($function, $_attr, $compiler, true, $tag_info[2]);
-
- $this->openTag($compiler, $tag, array($par_string, $compiler->nocache));
- // maybe nocache because of nocache variables or nocache plugin
- $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache;
- // compile code
- if (is_array($par_string)) {
- // old style with params array
- if (!is_array($function)) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string['par']}); \$_block_repeat=true; echo {$function}({$par_string['par']}, null, {$par_string['obj']}, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string['par']}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$par_string['par']}, null, {$par_string['obj']}, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- } else {
- $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string['par']}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$par_string['par']}, null, {$par_string['obj']}, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
- }
- } else {
- // new style with real parameter
- $par_string = str_replace('__content__', 'null', $par_string);
- if (!is_array($function)) {
- $output = "<?php \$_block_repeat=true; \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string}); echo {$function}({$par_string});while (\$_block_repeat) { ob_start();?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_block_repeat=true; \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string}); echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$par_string});while (\$_block_repeat) { ob_start();?>";
- } else {
- $output = "<?php \$_block_repeat=true; \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$par_string}); echo {$function[0]}::{$function[1]}({$par_string});while (\$_block_repeat) { ob_start();?>";
- }
- }
- } else {
- // must endblock be nocache?
- if ($compiler->nocache) {
- $compiler->tag_nocache = true;
- }
- $base_tag = substr($tag, 0, -5);
- // closing tag of block plugin, restore nocache
- list($par_string, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
- // This tag does create output
- $compiler->has_output = true;
- if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
- $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- } else {
- $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
- }
- // compile code
- if (!isset($parameter['modifier_list'])) {
- $mod_pre = $mod_post = '';
- } else {
- $mod_pre = ' ob_start(); ';
- $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
- }
- if (is_array($par_string)) {
- // old style with params array
- if (!is_array($function)) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$par_string['par']}, \$_block_content, {$par_string['obj']}, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$par_string['par']}, \$_block_content, {$par_string['obj']}, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$par_string['par']}, \$_block_content, {$par_string['obj']}, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- }
- } else {
- // new style witn real parameter
- $par_string = str_replace('__content__', '$_block_content', $par_string);
- if (!is_array($function)) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$par_string});" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else if (is_object($function[0])) {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$par_string}); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- } else {
- $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$par_string}); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
- }
- }
- }
- return $output . "\n";
- }
-
- }