В чем идея и как работают шаблоны?
Вопрос очень хороший. 
А ответ на него очень простой. 

Шаблоны нужны для отделения логики приложения от логики отображения. 
Разделив их, мы получим сразу кучу выгод:

Нормальную структуру приложения, когда вывод начинается только после того, как отработала вся логика. То есть у нас никогда не будет проблем с ошибкой 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. 
Главное, что про него надо знать - даже самые зелёные нубы осваивают его без затруднений. И настоятельно рекомендую сразу перейти на него, после того как наиграетесь с решениями на коленке.
Мне нужно реализовать коментарии, на разных страницах. Ещё нужна возможность быстро изменить визуал в 1 месте, и чтоб всё сразу заработало.
Я могу или в ручную писать повторяющуюся логику делая ctrl+c/ctrl+v и потом при изменение визуала искать где я это вставил и также там менять это.
Или сделать шаблон в 1 месте и вызывать его на каждой странице, где это нужно.

Тем самым я 1 раз меняю что-то в шаблоне. И он автоматически меняется на всех страницах.