07.02.2025 07:44:12 am
Доброго времени суток.
Задался вопросом написания собственной системы создания шаблонов. Мне не интересны существующие библиотеки, хочу сделать свой, сначала, в качестве практики, затем применить на рабочем сайте.
Давайте по косточкам разберем, что должен уметь современный шаблонизатор? Как задавать данные, что будет в шаблонах?
У меня будут еще вопросы.
Спасибо.
Навигация по теме:
Возможно, будет интересно:
Задался вопросом написания собственной системы создания шаблонов. Мне не интересны существующие библиотеки, хочу сделать свой, сначала, в качестве практики, затем применить на рабочем сайте.
Давайте по косточкам разберем, что должен уметь современный шаблонизатор? Как задавать данные, что будет в шаблонах?
У меня будут еще вопросы.
Спасибо.
Навигация по теме:
Возможно, будет интересно:
- Жалоба
07.02.2025 01:27:10 pm
Шаблонизатор должен генерировать и сохранять HTML файлы/части страниц, в кэше движка. Задача шаблонизатора отделить PHP от HTML и упростить работу с кодом, разработчику.
Данные в шаблонизатор передаются в виде переменных, массивов. Для того можно написать специальную функцию, что будет принимать и отдавать все переменные.
Тут, на сайте есть несколько записей, по данной теме. Поищите. Там примеры есть.
Данные в шаблонизатор передаются в виде переменных, массивов. Для того можно написать специальную функцию, что будет принимать и отдавать все переменные.
Тут, на сайте есть несколько записей, по данной теме. Поищите. Там примеры есть.
09.02.2025 07:37:50 am
Я думаю, что для больших и популярных сайтов, так их, как новости или социальные сети, есть смысл делать шаблонизатор, чтобы уменьши количество запросов в базу и время генерации страницы, тк на популярных порталах и так нагрузка большая, от посещаемости. Для маленьких сайтов, с маленькой посещаемостью смысла нет ни какого, лепить систему шаблонов. Она там ни к чему. Вы можете просто писать PHP код, прямо в HTML:
Это удобно, не запутаетесь в костылях шаблонизатора и работает 100%, без отказано. И ни какого шаблонизатора городить не надо.
<div class="name">
<?php echo $name; ?>
</div>
Это удобно, не запутаетесь в костылях шаблонизатора и работает 100%, без отказано. И ни какого шаблонизатора городить не надо.
15.02.2025 10:22:06 am
Если вы хотите писать так
Необходимо будет написать массив с фразами:
И дальше так:
Можно сделать по аналогии: Тема: Установка заголовка страницы (Шаблонизатор на PHP), только отправлять не одну строку, а массив фраз или данных, для вывода на экран. И совместить его со всем кодом данного поста в своём шаблонизаторе.
Возможно, будет интересно: Тема: Функция "preg_replace_callback" не работает (PHP).
{var}
, например:<p>{name}</p>
Необходимо будет написать массив с фразами:
$lang = [
'name' => 'Название'
];
И дальше так:
$tmp = preg_replace_callback(
'/\{(\w+)\}/',
function($match) use($lang)
{
return $lang[$match[1]];
},
$tmp);
Можно сделать по аналогии: Тема: Установка заголовка страницы (Шаблонизатор на PHP), только отправлять не одну строку, а массив фраз или данных, для вывода на экран. И совместить его со всем кодом данного поста в своём шаблонизаторе.
Возможно, будет интересно: Тема: Функция "preg_replace_callback" не работает (PHP).
21.02.2025 07:19:50 pm
Slash, как при помощи Вашего кода:
сделать обработку таких переменных:
Спасибо.
$tmp = preg_replace_callback(
'/\{(\w+)\}/',
function($match) use($lang)
{
return $lang[$match[1]];
},
$tmp);
сделать обработку таких переменных:
{lang.var}
- языковая переменная (массив$lang
).{tmp.var}
- переменная, что пришла с PHP скрипта (массив$tmp
).
Спасибо.
22.02.2025 07:31:54 am
Если
Пробую:
Результат:
Если версия PHP ниже 8, то замените строку:
На:
Иначе работать не будет.
$tmp
: это массив переменных, то имя переменной следует сменить в обработчике переменных шаблона, например, на: $content
. Написал так:$content = preg_replace_callback(
'/\{([\w\.]+)\}/',
function($match) use($lang, $tmp)
{
[$item, $var] = explode('.', $match[1]);
return $$item[$var];
},
$content);
Пробую:
$lang = [
'title' => 'Документ',
'info' => 'Информация'
];
$tmp = [
'test' => 'Тест шаблонизатора PHP'
];
$content = '<strong>{lang.title}</strong> {lang.info}';
$content .= ' {tmp.test}';
Результат:
<strong>Документ</strong> Информация Тест шаблонизатора PHP
Если версия PHP ниже 8, то замените строку:
[$item, $var] = explode('.', $match[1]);
На:
list ($item, $var) = explode('.', $match[1]);
Иначе работать не будет.
26.02.2025 06:10:05 pm
Я себе тоже делаю шаблонизатор, только я пишу не так
У меня вопрос по подключаемым шаблонам внутри шаблона. Вот обработал шаблонизатор один шаблон и выдал его на экран, а как быть с:
Как вставить код шаблона из инклуда в шаблон?
{ code }
, а так <!-- code -->
, так выглядит код красивее. Ну это дело вкуса, кому как.У меня вопрос по подключаемым шаблонам внутри шаблона. Вот обработал шаблонизатор один шаблон и выдал его на экран, а как быть с:
<!-- include name_file -->
Как вставить код шаблона из инклуда в шаблон?
26.02.2025 06:31:28 pm
Как то так:
Проверить не могу.
По моей идеи: Все
Думаю, этот код должен встречать шаблон раньше, чем обработка переменных. Потому что в подключённых шаблонах, так же могут быть прописаны переменные. И если работать с
if (preg_match('/<\!-- include (.*?) -->/', $cache_tpl))
{
function incl($cache_tpl, $dir_tpl)
{
preg_match_all('/<\!-- include (.*?) -->/', $cache_tpl, $includeArray);
foreach ($includeArray[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 . '</strong>');
}
}
if (preg_match('/\<\!-- include (.*?) -->/', $cache_tpl))
{
$cache_tpl = incl($cache_tpl, $dir_tpl);
}
return $cache_tpl;
}
$cache_tpl = incl($cache_tpl, $dir_tpl);
}
Проверить не могу.
По моей идеи: Все
include
, что будут находится в шаблоне, будут заменены на код, которых находится в файле, что указан в include
.Думаю, этот код должен встречать шаблон раньше, чем обработка переменных. Потому что в подключённых шаблонах, так же могут быть прописаны переменные. И если работать с
include
, после обработки переменных, то переменные в подключаемых файлах, останутся не обработанными.
02.03.2025 07:09:42 am
Спасибо, Slash!
Думаю разберусь, что к чему. Если, что я попрошу помощи.
Думаю разберусь, что к чему. Если, что я попрошу помощи.