Example #1
0
 /**
  * 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);';
     }
 }