Beispiel #1
0
 function getTemplate()
 {
     if ($this->template) {
         return $this->template;
     }
     $class = get_class($this);
     do {
         if (false === ($tail = strrpos($class, '__')) || false !== ($tail = substr($class, $tail + 2)) && '' !== trim($tail, '0123456789')) {
             $template = p\Superloader::class2file(substr($class, 6));
             if (p::resolvePublicPath($template . '.ptl')) {
                 return $template;
             }
         }
     } while (__CLASS__ !== ($class = get_parent_class($class)));
     return 'bin';
 }
 protected function load($template, $path_idx = 0)
 {
     $a = '\\' === DIRECTORY_SEPARATOR ? strtolower($template) : $template;
     $a = preg_replace("'[\\/]+'", '/', $a);
     if (isset($this->loadedStack[$a]) && $this->loadedStack[$a] >= $path_idx) {
         $path_idx = $this->loadedStack[$a] + 1;
     }
     $source = Patchwork::resolvePublicPath($template . '.ptl', $path_idx);
     if (!$source && 0 !== strcasecmp('.ptl', substr($template, -4))) {
         $path_idx = 0;
         $source = Patchwork::resolvePublicPath($template, $path_idx);
     }
     if (!$source) {
         return '{$DATA}';
     }
     $template = $a;
     $source = file_get_contents($a = $source);
     strncmp($source, "", 3) || ($source = substr($source, 3));
     // Remove UTF-8 BOM
     if (!preg_match('//u', $source)) {
         user_error("Template file {$a}:\nfile encoding is not valid UTF-8. Please convert your source code to UTF-8.");
     }
     $source = rtrim($source);
     if (false !== strpos($source, "\r")) {
         $source = strtr(str_replace("\r\n", "\n", $source), "\r", "\n");
     }
     if ('.ptl' !== strtolower(substr($a, -4))) {
         $a = stripslashes($this->Xlvar . "'\$0'" . $this->Xrvar);
         $source = preg_replace("'(?:{$this->Xlvar}|{$this->Xlblock})'", $a, $source);
         return $source;
     }
     $source = preg_replace_callback("'" . $this->Xcomment . "'su", array($this, 'preserveLF'), $source);
     $source = preg_replace_callback("/({$this->Xlblock}(?:{$this->XblockEnd})?{$this->Xblock})((?" . ">{$this->Xstring}|.)*?)({$this->Xrblock})/su", array($this, 'autoSplitBlocks'), $source);
     if ($this->serverMode) {
         false !== strpos($source, 'CLIENTSIDE') && ($source = preg_replace_callback("'{$this->Xlblock}(?:{$this->XblockBegin})?CLIENTSIDE{$this->Xrblock}.*?{$this->Xlblock}{$this->XblockEnd}CLIENTSIDE{$this->Xrblock}'su", array($this, 'preserveLF'), $source));
         false !== strpos($source, 'SERVERSIDE') && ($source = preg_replace_callback("'{$this->Xlblock}(?:{$this->XblockBegin}|{$this->XblockEnd})?SERVERSIDE{$this->Xrblock}'su", array($this, 'preserveLF'), $source));
     } else {
         false !== strpos($source, 'SERVERSIDE') && ($source = preg_replace_callback("'{$this->Xlblock}(?:{$this->XblockBegin})?SERVERSIDE{$this->Xrblock}.*?{$this->Xlblock}{$this->XblockEnd}SERVERSIDE{$this->Xrblock}'su", array($this, 'preserveLF'), $source));
         false !== strpos($source, 'CLIENTSIDE') && ($source = preg_replace_callback("'{$this->Xlblock}(?:{$this->XblockBegin}|{$this->XblockEnd})?CLIENTSIDE{$this->Xrblock}'su", array($this, 'preserveLF'), $source));
     }
     unset($this->loadedStack[$template]);
     $this->loadedStack[$template] = $path_idx;
     $a = '[-_a-zA-Z\\d\\x80-\\xFFFFFFFF][-_a-zA-Z\\d\\x80-\\xFFFFFFFF\\.]*';
     false !== strpos($source, 'INLINE') && ($source = preg_replace_callback("'{$this->Xlblock}INLINE\\s+({$a}(?:[\\/]{$a})*)(:-?\\d+)?\\s*{$this->Xrblock}'su", array($this, 'INLINEcallback'), $source));
     unset($this->loadedStack[$template]);
     return $source;
 }