template_touch_name($name); return $this->template_load_by_path($template_path, $variables, $new); } private function template_touch_name($name): string { $template_path = ROOT_DIR . SLASH . PLAYAREA_DIR_NAME . SLASH . "templates" . SLASH . $name; if(file_exists($template_path)) return $template_path; $plugin_template_path = ROOT_DIR . SLASH . PLAYAREA_DIR_NAME . SLASH . "plugins" . SLASH . $name; if(file_exists($plugin_template_path)) return $plugin_template_path; return $template_path; } // Загрузка шаблона по его адресу public function template_load_by_path($path, $variables = array(), $new = true) { // Загрузка шаблона из буффера $cache = $this->template_cache_load($path, $variables, $new); if($cache) return $cache; // Начало буффера ob_start(); global $b; require $path; $buffer = ob_get_contents(); ob_end_clean(); // Конец буффера // Сохранение буффера в кеш $rendered = $this->template_variables_apply($buffer, $variables); if($new === false) $this->template_cache_save($path, $variables, $rendered); // Вывод буффера пользователю echo $rendered; return $buffer; } // Применить значения переменных private function template_variables_apply($content, $variables) { return preg_replace_callback('/{{\s*(\w+)\s*}}/', function($match) use ($variables) { $key = $match[1]; return $variables[$key] ?? $match[0]; }, $content); } // Сохранить шаблон private function template_cache_save($name, $variables, $content): bool { if(!TEMPLATE_CACHE) return false; $path = $this->template_cache_get_full_path($name, $variables); file_put_contents($path, $content); return true; } // Есть ли шаблон с таким именем private function template_cache_has($name, $variables): bool { $path = $this->template_cache_get_full_path($name, $variables); return file_exists($path); } // Загрузка кешированного шаблона private function template_cache_load($name, $variables, $new = false) { if(!TEMPLATE_CACHE) return false; if(!$new && $this->template_cache_has($name, $variables)) { $cache = $this->template_cache_get($name, $variables); echo $cache; return $cache; } return false; } // Получить кеш шаблона private function template_cache_get($name, $variables): string { $path = $this->template_cache_get_full_path($name, $variables); return file_get_contents($path); } // Получить полный путь до кеша шаблона private function template_cache_get_full_path($name, $variables): string { $path = $this->get_storage_dir() . SLASH . "temp" . SLASH . "templates" . SLASH; return $path . md5($name . json_encode($variables)) . ".php"; } // Количество кешированных шаблонов public function template_cache_count(): int { $path = $this->get_storage_dir() . SLASH . "temp" . SLASH . "templates" . SLASH; $files = glob($path."/*"); return count($files); } // Удалить весь кеш шаблонов public function template_cache_remove(){ $path = $this->get_storage_dir() . SLASH . "temp" . SLASH . "templates" . SLASH; $files = glob($path."/*"); if (count($files) > 0) { foreach ($files as $file) { if (file_exists($file)) { unlink($file); } } } } }