Exemplo n.º 1
0
 public function fetch($templateFile)
 {
     if (strncmp($templateFile, "string:", strlen("string:")) === 0) {
         $this->parserContext->setString(substr($templateFile, strlen("string:")));
         $this->compilerContext->setClassName("Template_" . md5($this->parserContext->getString()));
     } else {
         if (!is_null($this->parserContext->getBaseDirectory()) && strncmp($templateFile, $this->parserContext->getBaseDirectory(), strlen($this->parserContext->getBaseDirectory())) === 0) {
             $templateFile = substr($templateFile, strlen($this->parserContext->getBaseDirectory()) + 1);
         }
         // must be set before CompilerContext::getFullyQualifiedClassName() is called
         // FIXME: uncouple this
         $this->parserContext->setFile($templateFile);
     }
     $className = $this->compilerContext->getFullyQualifiedClassName();
     if (!class_exists($className)) {
         $saveFileName = $this->classDirectory . "/" . str_replace("\\", "/", trim($className, "\\") . ".php");
         if (file_exists($saveFileName)) {
             require_once $saveFileName;
         } else {
             $oldUmask = umask(0);
             $compiledTemplate = $this->compilerContext->setTemplate($this->parserContext->parse())->compile();
             if (!is_dir(dirname($saveFileName))) {
                 @mkdir(dirname($saveFileName), $this->dirPerms, true);
             }
             file_put_contents($saveFileName, $compiledTemplate);
             @chmod($saveFileName, $this->dirPerms);
             umask($oldUmask);
             require_once $saveFileName;
         }
     }
     $templateInstance = new $className();
     ob_start();
     $templateInstance($this->locals);
     $output = ob_get_clean();
     foreach ($this->outputFilters as $filter) {
         $output = $filter($output);
     }
     return $output;
 }