Вопрос очень хороший.
А ответ на него очень простой.
Шаблоны нужны для отделения
логики приложения от
логики отображения.
Разделив их, мы получим сразу кучу выгод:
- Нормальную структуру приложения, когда вывод начинается только после того, как отработала вся логика. То есть у нас никогда не будет проблем с ошибкой headers already sent, с возвратом json-а вместо html, с выводом в page header-е тех данных, которые появляются только в процессе работы скрипта
- Мобильность - один и тот же движок можно будет использовать на нескольких сайтах, меняя только шаблоны, но весь код оставляя одинаковым. Что поможет, в частности, вносить обновления в движок и исправлять ошибки на всех сайтах разом.
- Разделение труда - сейчас обычно над отображением работают фронтендеры, то есть, когда бизнес-логика отделена от шаблонов, то любой фронт сможет с ней работать
Соответственно, главное, что надо знать про шаблоны - это то, что
любой вывод в РНР скрипте начинается только после того, как отработала вся бизнес-логика.
Также важно понимать, что в самом по себе смешивании "кода и разметки" ничего ужасного нет. В шаблоне
всегда будет код. Без него невозможно выводить динамический контент. Важно только - какой это код, к чему он относится? Код в шаблоне должен относиться только к самому шаблону. На первых порах новичку сложно это отличить. И это еще один плюс специализированных шаблонизаторов.
После этого есть варианты, которые отличаются в основном удобством работы с кодом шаблона.
Править HTML код записанный в виде РНР строки - это САМЫЙ
неудобный .
Дальше идут всякие наколенные решения, типа
бизнес-логика
include header
?>
хтмл конкретной страницы
<?php include footer ?>
или чуть более продвинутый, когда шаблоны хранятся отдельно и могут вкладывться друг в друга. Сначала пишем функцию,
function render_template($filename, array $data = [])
{
ob_start();
extract($data);
require __DIR__ . '/' . $filename;
return ob_get_clean();
}
а потом в коде страницы пишем
бизнес-логика
...
$page_html = render_template('page.tpl.php', [
'data' => $data,
]);
echo render_template('main.tpl.php', [
'navigaton' => $nav_list,
'title' => $title,
'page' => $page_html,
];
где сами шаблоны это
...
<?php foreach ($navigation as $item): ?>
<li>
<a href="<?= e($item['href']); ?>"><?= e($item['title']); ?></a>
</li>
<?php endforeach ?>
Важно! Любой вывод в этих шаблонах должен экранироваться
в обязательном порядке (кроме очевидных случаев, когда мы выводим результат рендера).
Ну и наконец нормальные шаблонизаторы, из которых я горячо рекомендую Twig.
Главное, что про него надо знать - даже самые зелёные нубы осваивают его без затруднений. И
настоятельно рекомендую сразу перейти на него, после того как наиграетесь с решениями на коленке.