Initial commit
This commit is contained in:
119
engine/Main/trait.templates.php
Normal file
119
engine/Main/trait.templates.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
// Работа с шаблонами
|
||||
|
||||
defined('ROOT_DIR') || exit;
|
||||
|
||||
trait Templates {
|
||||
// Загрузка шаблона
|
||||
public function template_load($name, $variables = array(), $new = true)
|
||||
{
|
||||
$template_path = $this->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user