23:16 31.10.2017
Писал для своего небольшого проекта шаблонизатор (для того же проекта: Автозагрузка классов на PHP).
Код шаблонизатора:
В функцию "template", в вашем контролере, например, вставляете название шаблона, без расширение файла, например,
Думаю, разберетесь! Но, если, что, спрашивайте.
Код шаблонизатора:
<?php
/*
DANFA https://danfa.net
Функция template($subject);
* $subject – имя подключаемого шаблона, без расширения, например index.
Файл template.php
*/
# Функция Шаблонизатор
function template($subject)
{
# URL страницы
$page = basename($_SERVER['REQUEST_URI']);
if (preg_match('/\&/', $page))
{
$explode = explode('&', $page);
$page = $explode[0];
}
# END URL страницы
$style_tpl = 'standard'; # Название стиля
$dir_cache = 'cache/'; # Директория хранения кэша
$dir_tpl = 'style/' . $style_tpl . '/html/'; # Директория хранения шаблонов
# Проверка шаблона в кэше
if (file_exists($dir_cache . $style_tpl . '_' . $page . PHP))
{
include($dir_cache . $style_tpl . '_' . $page . PHP);
}
else
{
if (!file_exists($dir_tpl . $subject . HTML)) # Проверка наличия шаблона
{
exit('No Template: <strong>' . $subject . HTML . '</strong>');
}
ob_start(); # Включение буферизации
include($dir_tpl . $subject . HTML); # Подключение шаблона
$cache_tpl = ob_get_contents(); # Получение содержимого буфера
ob_end_clean(); # Отключение и очистка буфера
# Обработка INCLUDE
if (preg_match('/\{include (.*?)\}/', $cache_tpl))
{
function incl($cache_tpl, $dir_tpl)
{
preg_match_all('/\{include (.*?)\}/', $cache_tpl, $include_array);
foreach ($include_array[1] as $key => $incl)
{
if (file_exists($dir_tpl . $incl . HTML))
{
$incl_tpl = '/\{include ' . $incl . '\}/';
$incl_replace = file_get_contents($dir_tpl . $incl . HTML);
$cache_tpl = preg_replace($incl_tpl, $incl_replace, $cache_tpl);
}
else
{
exit('No Template: <strong>' . $incl . HTML . '</strong>');
}
}
if (preg_match('/\{include (.*?)\}/', $cache_tpl))
{
$cache_tpl = incl($cache_tpl, $dir_tpl);
}
return $cache_tpl;
}
$cache_tpl = incl($cache_tpl, $dir_tpl);
}
# END Обработка INCLUDE
$code = array(
'/\{echo (.*?)\}/' => '<?php echo $1; ?>',
'/\{if (.*?)\}/' => '<?php if ($1): ?>',
'/\{elseif (.*?)\}/' => '<?php elseif ($1): ?>',
'/\{else}/' => '<?php else: ?>',
'/\{endif}/' => '<?php endif; ?>',
'/\{foreach (.*?)\}/' => '<?php foreach ($1): ?>',
'/\{endforeach}/' => '<?php endforeach; ?>'
);
$cache_tpl = preg_replace(array_keys($code), array_values($code), $cache_tpl); # Замена кода в шаблоне
$file = fopen($dir_cache . $style_tpl . '_' . $page . PHP, 'w-'); # Создание нового файла
fwrite($file, $cache_tpl); # Запись содержимого буфера в файл
fclose($file); # Закрытие файла
include($dir_cache . $style_tpl . '_' . $page . PHP); # Подключение файла кэша
}
}
В функцию "template", в вашем контролере, например, вставляете название шаблона, без расширение файла, например,
index
:
template('index');
Думаю, разберетесь! Но, если, что, спрашивайте.
- Жалоба