Просмотр поста

.
Delphinum
предисловие (+/-)
Цель проекта - реализация сложных решений с минимальными затратами. Возможно это позволит новичкам лучше во всем этом разобраться, а старичкам взглянуть с другого угла.


Задача:
Рекурсивный шаблонизатор.

Решение:
Для тех, кто не в курсе, под рекурсивным шаблонизатором имеется в виду некое решение, позволяющее взять вот такие шаблоны:
<!DOCTYPE html>                                                                 
<html>                                                                          
    <head>                                                                      
        <!-- Подключение файла head.html -->                                                                                           
    </head>                                                                     
    <body>                                                                      
        <?= $content ?>                                                         
    </body>                                                                     
</html>


<title><?= $title ?></title>
<meta charset="utf-8" />

и сформировать из них такую страницу:
<html>                                                                          
    <head>                                                                      
        <title>Загловок</title>
        <meta charset="utf-8" />                                                                                      
    </head>                                                                     
    <body>                                                                      
        Тело                                                         
    </body>                                                                     
</html>

Другими словами, это механизм, позволяющий заполнить шаблон данными с возможностью подключения в шаблоне другого шаблона.

В PHP минимально (на мой взгляд) реализуется следующим образом:
<?php                                                                                                                                                  
/**
 * @param string $path Адрес шаблона.
 * @param array $assign Переменные, передаваемые шаблону.
 *
 * @return string Скомпилированный документ.
 */
function template($path, array $assign = []){                                      
  extract($assign);                                                             
  ob_start();                                                                      
  include($path);                                                               
  return ob_get_clean();                                                        
}


Используется так:
echo template('index.html', [                                                   
  'title' => 'Заголовок',                                                               
  'content' => 'Тело',                                                      
]);


Послесловие (+/-)

Почему в "авторских статьях", а не в "полезных кодах"? Цель проекта именно образовательная. Код конечно можно использовать и в реальных проектах, но это уже на ваше усмотрение.

Предлагайте в комментариях задачу для следующей темы.