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; }