A library which provides adapters to different PHP templating engines, (*1)
Install
MetaTemplate follows the PSR-0 standard for class loading, so its
classes can be loaded with every compliant autoloader, such as
Zend_Loader
or the Symfony Classloader., (*2)
Installation is easy, just register the MetaTemplate
namespace with
your autoloader and point it to the directory where you copied the
contents of the lib
directory to., (*3)
Basic Usage
Most of the time you will be consuming engines via the Template
class.
It provides some methods, which take a filename and return a template
instance., (*4)
MetaTemplate ships with these adapters/engines by default:, (*5)
-
PHPTemplate
, mapped to .php
and .phtml
-
PhpSass
, mapped to .sass
and .scss
-
MarkdownTemplate
(requires
php-markdown to be loaded), mapped to
.md
and .markdown
-
LessTemplate
(requires Less to be installed via node), mapped to
.less
(Requires Symfony_Process 2)
-
MustacheTemplate
(requires
phly_mustache),
mapped to .mustache
The MetaTemplate\Template
class has a static create
method, which
creates template instances from a given path., (*6)
For example:, (*7)
<?php
use MetaTemplate\Template;
$template = Template::create('/path/to/foo.phtml');
echo get_class($template);
// => "\MetaTemplate\Template\PHPTemplate"
All templates implement the \MetaTemplate\Template\TemplateInterface
,
which provides a render
method which, you probably guessed it, returns
the rendered contents., (*8)
The render
method takes two arguments, which are both optional:, (*9)
-
$context
: The template's context, in most engines this is what
$this
inside the template script refers to.
-
$locals
: A array, which defines the local variables available in
the template script.
These two arguments allow to inject the data into the template script., (*10)
If the templating engine does not have to support contexts or locals,
these two arguments are simply ignored. This is the case with the
Markdown and Less engines., (*11)
Digging one layer deeper
If want to setup all engine mappings up by yourself and have no
default setup of Engines, then the MetaTemplate\Util\EngineRegistry
is for you., (*12)
This class simply provides the instance behind the static methods of
the MetaTemplate\Template
class., (*13)
To map a template class to one or more file extensions, just call
the register
method the same way you would on the Template
class:, (*14)
$registry = new \MetaTemplate\Util\EngineRegistry;
$registry->register('\\MetaTemplate\\Template\\LessTemplate', 'less');
You can then use the create
method to create new Template instances
for the provided path., (*15)
Writing your own engines
As previously noted, all templating engines need to implement the
MetaTemplate\Template\TemplateInterface
. Though, there is the
MetaTemplate\Template\Base
class, which you can inherit from, which
handles some redundant aspects, such as template data loading., (*16)
The Base
class defines a prepare
method, which lets you hook into
the template initialization. This method is called before the
constructor returns., (*17)
Your template's content is loaded into the $data
property., (*18)
Look at the supplied templating engines, if you need some examples., (*19)