diff --git a/libs/sysplugins/smarty_internal_runtime_block.php b/libs/sysplugins/smarty_internal_runtime_block.php new file mode 100644 index 00000000..36694588 --- /dev/null +++ b/libs/sysplugins/smarty_internal_runtime_block.php @@ -0,0 +1,98 @@ +inheritanceBlocks[$block['name']][$level])) { + $block = $this->inheritanceBlocks[$block['name']][$level]; + $block['level'] = $level; + $level ++; + } + // ignore hidden block + if (isset($block['hide'])) { + return; + } + // root block function for possible parent block call + $block['root'] = $function; + if (isset($block['append'])) { + $this->callParentBlock($callerTpl, $block); + } + $block['function']($callerTpl, $block); + if (isset($block['prepend'])) { + $this->callParentBlock($callerTpl, $block); + } + } + + /** + * Call inheritance parent {block} tag + * + * @param \Smarty_Internal_Template $callerTpl template object of caller + * @param array $block block parameter + */ + public function callParentBlock(Smarty_Internal_Template $callerTpl, $block) + { + $level = isset($block['level']) ? $block['level'] : 0; + if (isset($this->inheritanceBlocks[$block['name']][$level - 1])) { + // call registered parent + $parent = $this->inheritanceBlocks[$block['name']][$level - 1]; + $parent['root'] = $block['root']; + $parent['function']($callerTpl, $parent); + } else { + // default to root block + $block['root']($callerTpl, $block); + } + } + + /** + * Call inheritance child {block} tag + * + * @param \Smarty_Internal_Template $callerTpl template object of caller + * @param array $block block parameter + */ + public function callChildBlock(Smarty_Internal_Template $callerTpl, $block) + { + $level = isset($block['level']) ? $block['level'] : - 1; + if (isset($this->inheritanceBlocks[$block['name']][$level + 1])) { + $child = $this->inheritanceBlocks[$block['name']][$level + 1]; + $child['level'] = $level + 1; + $child['function']($callerTpl, $child); + } + } + + /** + * Register inheritance {block} tag + * + * @param \Smarty_Internal_Template $callerTpl template object of caller + * @param array $block block parameter + */ + public function registerBlock(Smarty_Internal_Template $callerTpl, $block) + { + if (!isset($this->inheritanceBlocks[$block['name']])) { + $this->inheritanceBlocks[$block['name']][0] = $block; + } else { + array_unshift($this->inheritanceBlocks[$block['name']], $block); + } + } +} \ No newline at end of file