(.+?)\s*;?\s*\?>/msx' => '$1; ?>', '/\<\?=\s*(\$h\(.+?)\s*;?\s*\?>/msx' => '', '/\<\?=\s*(.+?)\s*;?\s*\?>/msx' => '' ]; /** * Compiles a template and writes it to a cache file, which is used for inclusion. * * @param string $file The full path to the template that will be compiled. * @param array $options Options for compilation include: * - `path`: Path where the compiled template should be written. * - `fallback`: Boolean indicating that if the compilation failed for some * reason (e.g. `path` is not writable), that the compiled template * should still be returned and no exception be thrown. * @return string The compiled template. */ public static function template($file, array $options = []) { $cachePath = Libraries::get(true, 'resources') . '/tmp/cache/templates'; $defaults = ['path' => $cachePath, 'fallback' => false]; $options += $defaults; $stats = stat($file); $oname = basename(dirname($file)) . '_' . basename($file, '.php'); $oname .= '_' . ($stats['ino'] ?: hash('md5', $file)); $template = "template_{$oname}_{$stats['mtime']}_{$stats['size']}.php"; $template = "{$options['path']}/{$template}"; if (file_exists($template)) { return $template; } $compiled = static::compile(file_get_contents($file)); if (is_writable($cachePath) && file_put_contents($template, $compiled) !== false) { foreach (glob("{$options['path']}/template_{$oname}_*.php", GLOB_NOSORT) as $expired) { if ($expired !== $template) { unlink($expired); } } return $template; } if ($options['fallback']) { return $file; } throw new TemplateException("Could not write compiled template `{$template}` to cache."); } /** * Preprocess the passed `$string` (usually a PHP template) for syntax replacements * using sets of regular expressions. * * @see lithium\template\view\Compiler::$_processors * @param string $string The string to be preprocessed. * @return string Processed string. */ public static function compile($string) { $patterns = static::$_processors; return preg_replace(array_keys($patterns), array_values($patterns), $string); } } ?>