예제 #1
0
 public function before(PHPTAL_Php_CodeWriter $codewriter)
 {
     if ($this->shouldUseCallback()) {
         $function_base_name = 'slot_' . preg_replace('/[^a-z0-9]/', '_', $this->expression) . '_' . self::$uid++;
         $codewriter->doFunction($function_base_name, 'PHPTAL $_thistpl, PHPTAL $tpl');
         $this->function_name = $codewriter->getFunctionPrefix() . $function_base_name;
         $codewriter->doSetVar('$ctx', '$tpl->getContext()');
         $codewriter->doInitTranslator();
     } else {
         $codewriter->pushCode('ob_start()');
         $this->function_name = null;
     }
 }
예제 #2
0
 public function before(PHPTAL_Php_CodeWriter $codewriter)
 {
     $macroname = strtr(trim($this->expression), '-', '_');
     if (!preg_match('/^[a-z0-9_]+$/i', $macroname)) {
         throw new PHPTAL_ParserException('Bad macro name "' . $macroname . '"', $this->phpelement->getSourceFile(), $this->phpelement->getSourceLine());
     }
     if ($codewriter->functionExists($macroname)) {
         throw new PHPTAL_TemplateException("Macro {$macroname} is defined twice", $this->phpelement->getSourceFile(), $this->phpelement->getSourceLine());
     }
     $codewriter->doFunction($macroname, 'PHPTAL $_thistpl, PHPTAL $tpl');
     $codewriter->doSetVar('$tpl', 'clone $tpl');
     $codewriter->doSetVar('$ctx', '$tpl->getContext()');
     $codewriter->doInitTranslator();
     $codewriter->doXmlDeclaration(true);
     $codewriter->doDoctype(true);
 }