tleckie / template
Fast and powerful php template engine. Syntax close to php for easy learning and management.
Fund package maintenance!
teodoroleckie
www.paypal.com/donate?business=ZHYA2MTGA4884¤cy_code=USD
Requires
- php: ^8
Requires (Dev)
- friendsofphp/php-cs-fixer: v3.0.0-beta.2
- infection/infection: ^0.21.5
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^9.5
README
Syntax close to php for easy learning and management.
Installation
You can install the package via composer:
composer require tleckie/template
Printing variable:
{{$name}}
Flexibility of spaces in variables:
<p>{{$name}}</p> <p>{{ $user->getName() }}</p> <p> {{ $user->getName() }} </p>
Printing constant:
{{CONSTANT}}
Set variables:
{set $variable = 'test'} {set $variable = 355} {set $userId = 25} {set $userModel = new \MyNamespace\User($userId)} {set $userModel = new \MyNamespace\User(25, 'John')}
Dump:
{dump $users}
Comments:
{# {dump $users} #}
Extends template:
<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 );
Conditionals if, else & elseif:
{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}
Nested loops:
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>
Helpers:
Create your own helpers to invoke on the template.
{{$this->arrayHelper::last($persons)}}
Create the template instance:
<?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>
Rules:
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 );
Helpers:
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 ;)