Yet Another PHP Template Engine
Useful little (<150 lines) templater that doesn't get in the way.
Supports parent-child/master templates with sections (think TWIG).
PHP 5.3+ Recommended.
The core of the templater is focused on some simple reg-ex replcements. As Below.
- Output / Logic
{{ $hello }}
--><?php echo $hello ;?>
{% if(true): %}True!{% endif %}
--><?php if(true): ;?>True!<?php endif ;?>
- Templater Shortcuts
{{t Render('menu') }}
--><?php echo $this->Render('menu') ;?>
{%t StartSection('content') %}
--><?php $this->StartSection('content') ;?>
The theme here is that double brackets output and bracket-percent performs actions/does logic.
You are of course free to use normal php tags where you see fit, these are there to help but are not required.
The templates can be compiled to skip the step of reg-exing them, the configuration is explained below.
The compiled templates can be cleared at run-time by calling Template::ClearCompiled()
The configuration is done via constants, as this is simpler than some sort of config system (except where one already exists).
- DIR_TEMPLATES -- The template directory.
- DIR_TEMPLATES_COMPILED - The compiled templates directory. If not defined or false compiled templates are not used. This is not relative to the template directory.
Both can be either absolute paths or relative based on what file_get_contents
can find.
Child Template hello.php
:
{%t SetMaster('master') %}
{%t StartSection('content') %}
Hello {{$world}}
{%t EndSection() %}
Any text/content outside the sections will be lost but executed (ie not output).
When evaluated the master template will be rendered and the content of the sections will be available to output.
Parent Template master.php
:
<!doctype html>
<html>
<head>
<title>{{$title}}</title>
</head>
<body>
{{t GetSection('content') }}
</body>
</html>
$this->sections
may be used for the available sections.
The context is the data initially provided to the template engine and is available via $this->context
; these variables are extracted as references for use.
A new context is created for each recursive call (ie master template, menu, etc) which contains the 'upper' context. modification is one way a higher context may affect lower contexts but not vice versa.
For instance, if a child template were to set the title in the current context this will be available in context when the master template is rendered.
IE. {%t context['title'] = 'Hello!' }%
. The master can then use {{$title}}
to display 'Hello!'
Due to the nature of extract
some variables cannot be used in render data, these include context
, this
, file
among others.