/** * Dispatch {extends} tag * @param Tokenizer $tokens * @param Template $tpl * @throws InvalidUsageException * @return string */ public static function tagExtends(Tokenizer $tokens, Template $tpl) { if (!empty($tpl->_extends)) { throw new InvalidUsageException("Only one {extends} allowed"); } elseif ($tpl->getStackSize()) { throw new InvalidUsageException("Tags {extends} can not be nested"); } $tpl_name = $tpl->parsePlainArg($tokens, $name); if (empty($tpl->_extended)) { $tpl->addPostCompile(__CLASS__ . "::extendBody"); } if ($tpl->getOptions() & Template::DYNAMIC_EXTEND) { $tpl->_compatible = true; } if ($name) { // static extends $tpl->_extends = $tpl->getStorage()->getRawTemplate()->load($name, false); if (!isset($tpl->_compatible)) { $tpl->_compatible =& $tpl->_extends->_compatible; } $tpl->addDepend($tpl->_extends); return ""; } else { // dynamic extends if (!isset($tpl->_compatible)) { $tpl->_compatible = true; } $tpl->_extends = $tpl_name; return '$parent = $tpl->getStorage()->getTemplate(' . $tpl_name . ', \\Fenom\\Template::EXTENDED);'; } }