Syntax close to php for easy learning and management.
You can install the package via composer:
composer require tleckie/template
{{$name}}
Flexibility of spaces in variables:
<p>{{$name}}</p>
<p>{{ $user->getName() }}</p>
<p>
{{
$user->getName()
}}
</p>
{{CONSTANT}}
{set $variable = 'test'}
{set $variable = 355}
{set $userId = 25}
{set $userModel = new \MyNamespace\User($userId)}
{set $userModel = new \MyNamespace\User(25, 'John')}
{dump $users}
{# {dump $users} #}
<html>
<head></head>
<body>
{extends Common/Header.html}
<p>List</p>
{foreach $users as $user}
<p>{{$user->getName()}}</p>
{endforeach}
{extends Common/Footer.html}
</body>
</html>
If you add changes to the included templates as extensions, the compiler will not show these changes. To remove the compiled files you have the "flushCompiled()" method
$tpl = new Template(__DIR__.'/tpl/', '/var/www/cache/compiled/');
$tpl->flushCompiled();
You can enable development mode so that templates are always compiled.
use Tleckie\Template\Template;
$tpl = new Template(
__DIR__.'/tpl/',
'/var/www/cache/compiled/',
null,
true // development mode
);
{if $title === 'title'}
<div>{{$title}}</div>
{else}
It is not a headline!
{endif}
{if $type === 'Orange'}
<div>{{$type}}</div>
{elseif $title !== 'Apple'}
It is not an Apple!
{else}
Other fruit!
{endif}
{if $age >= 18}
<div>Yes!</div>
{else}
Ups :)
{endif}
{if $age !== 18}
<div>Yes!</div>
{else}
Ups :)
{endif}
Foreach and for supported.
<html>
<head></head>
<body>
{foreach $data as $key => $persons}
{foreach $persons as $id => $name}
<div><string>{{$name}}:</string>{{ $key }}</div>
{endforeach}
{endforeach}
</body>
</html>
Create your own helpers to invoke on the template.
{{$this->arrayHelper::last($persons)}}
<?php
require_once "vendor/autoload.php";
use Tleckie\Template\Template;
$tpl = new Template(__DIR__ . '/tpl/', '/var/www/cache/compiled/');
$data = [
'names' => ['Marcos', 'John', 'Pedro', 'Marta'],
'title' => 'User list',
'users' => [
new User('Marcos'), new User('John'), new User('Pedro')
]
];
$tpl->render('List/Users.html', $data);
Template List/Users.html
<html>
<head></head>
<body>
{foreach $users as $user}
<p>{{ strtoupper($user->getName()) }}</p>
{endforeach}
</body>
</html>
The Tleckie\Template\Compiler\Parser\Rules class establishes the rules for handling templates. You can create new rules to enrich your templating engine through the RuleInterface interface.
use Tleckie\Template\Template;
use Tleckie\Template\Compiler\Compiler;
use Tleckie\Template\Compiler\Parser\Rules;
$rules = [
new Rules(),
new MyOwnRules()
];
$compiler = new Compiler($rules);
$tpl = new Template(
__DIR__.'/tpl/',
'/var/www/cache/compiled/',
$compiler
);
You can create your own helpers to be invoked from templates to do complex tasks, manipulate objects or strings.
The Template class has a method for adding helpers. Note that by this mechanism you can also add your dependency injector.
<?php
require_once "vendor/autoload.php";
use Tleckie\Template\Template;
$tpl = new Template(
__DIR__ . '/tpl/',
'/var/www/cache/compiled/'
);
$tpl->registerHelper(
'arrayHelper',
new \MyNamespace\Infrastructure\Helpers\ArrayHelper()
);
Each helper added to the template object must have an alias to be invoked through it.
{{$this->arrayHelper::last($persons)}}
Helper example:
<?php
namespace MyNamespace\Infrastructure\Helpers;
use function end;
/**
* Class ArrayHelper
* @package MyNamespace\Infrastructure\Helpers
* @author Teodoro Leckie Westberg <teodoroleckie@gmail.com>
*/
class ArrayHelper
{
public static function last(array $array)
{
return end($array);
}
}
That's all! I hope this helps you ;)