studioAura
4/30/2017 - 8:36 AM

Простой шаблонизатор с выполнением кода PHP внутри шаблона

Простой шаблонизатор с выполнением кода PHP внутри шаблона

//====================================================
// Класс
//====================================================
<?php
class Template
  {
  public $vars   = array();
  public $template;

  public function __construct($tpl_name)
   {
   if(empty($tpl_name) || !file_exists($tpl_name))
    {
    return false;
    }
   else
    {
   /* $this->template = file_get_contents($tpl_name);*/
      ob_start();
        include ($tpl_name);
        $this->template = ob_get_contents();
      ob_end_clean();
    }
   }

  public function set_tpl($key,$var)
   {
   $this->vars[$key] = $var;
   }

  public function tpl_parse()
   {
   foreach($this->vars as $find => $replace)
       {
       $this->template = str_replace($find, $replace, $this->template);
       }
   }
  }
?>

//====================================================
// Непосредственно шаблон
//====================================================
<!DOCTYPE HTML>
<html>
<head>
  <title>{TITLE}</title>
</head>
<body  style="background-color: {BGCOLOR}">
   {CONTENT}
   <?php
    $a = 2;
    $b = 3;
    $c = $a + $b;
    echo "<br>" . $c;
    ?>
</body>
</html>


//====================================================
// Использование
//====================================================
<?php
require('classes/Template.php'); // Подключаем файл с классом
$content = "
<h1>Videamus animi partes, quarum est conspectus illustrior;</h1>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Piso igitur hoc modo, vir optimus tuique, ut scis, amantissimus. Ait enim se, si uratur, Quam hoc suave! dicturum. <mark>Duo Reges: constructio interrete.</mark> <b>Immo videri fortasse.</b> </p>

<ol>
	<li>Atque hoc loco similitudines eas, quibus illi uti solent, dissimillimas proferebas.</li>
	<li>Huius ego nunc auctoritatem sequens idem faciam.</li>
	<li>Utilitatis causa amicitia est quaesita.</li>
</ol>


<ul>
	<li>An potest cupiditas finiri?</li>
	<li>Sit ista in Graecorum levitate perversitas, qui maledictis insectantur eos, a quibus de veritate dissentiunt.</li>
	<li>Laboro autem non sine causa;</li>
	<li>Quid igitur dubitamus in tota eius natura quaerere quid sit effectum?</li>
</ul>
";

$template = new Template('template/index.tpl');
$template->set_tpl('{TITLE}','Проверка шаблонизатора'); // Установка переменной {TITLE}
$template->set_tpl('{BGCOLOR}','#9CCCC8'); // Установка цвета {BGCOLOR}
$template->set_tpl('{CONTENT}', $content); //Установка переменной {CONTENT}
$template->tpl_parse(); // Парсим
echo $template->template; // Выводим нашу страничку
?>