Création et utilisation de Templates avec TwiQ
TwiQ est un simple moteur de templates qui ressemble beaucoup à Twig, le moteur de templates utilisé dans Symfony. Mais TwiQ est constitué d'une seule classe. Si vous connaissez Twig, vous apprendrez rapidement TwiQ. Je vous recommande de consulter la documentation officielle de Twig, car la plupart des concepts et directives s'appliqueront également à TwiQ.
Templates TwiQ
Un template est simplement un fichier texte. Il contient des variables ou des expressions, qui sont remplacées par des valeurs lors de l'évaluation du template, ainsi que des balises, qui contrôlent la logique du template.
Voici un exemple de template minimal qui illustre quelques notions de base :
<!DOCTYPE html>
<html>
<head>
<title>{{ page.title }}</title>
</head>
<body>
<ul id="navigation">
{% for item in site.menu.main %}
<li><a href="{{ item.href }}">{{ item.label }}</a></li>
{% endfor %}
</ul>
<h1>{{ page.title }}</h1>
{{ content }}
</body>
</html>
Il y a deux types de délimiteurs :
{% ... %}
{{ ... }}
Le premier est utilisé pour exécuter des instructions telles que les boucles for, tandis que le second affiche le résultat d'une expression.
Utilisation de TwiQ dans les Contrôleurs
Voici un exemple d'utilisation de TwiQ dans un contrôleur :
<?php
namespace App\Controller;
use Qwwwest\Namaskar\PageDataBuilder;
use Qwwwest\Namaskar\Response;
use Qwwwest\Namaskar\AbstractController;
class MyController extends AbstractController
{
#[Route('/{url*}')]
public function showPage($url = '/'): ?Response
{
return $this->render($theme);
}
}
Dans cet exemple, nous utilisons la méthode render()
pour générer du contenu HTML en passant le thème requis. Les variables seront récupérées par TwiQ via le service ZenConfig.
Syntaxe TwiQ
La syntaxe TwiQ est inspirée de Twig, donc vous trouverez de nombreuses similitudes. Voici les principales fonctionnalités et directives que vous pouvez utiliser :
1. Variables : Vous pouvez afficher des variables dans vos templates en utilisant la syntaxe :
{{ variable }}
Par exemple :
<p>Bienvenue, {{ name }} !</p>
Ici, la variable
name
sera remplacée par sa valeur lors de l'exécution du template.
2. Instructions Conditionnelles : Vous pouvez utiliser la directive
{% if condition %} ... {% else %} ... {% endif %}
pour effectuer des instructions conditionnelles. Par exemple :
{% if age >= 18 %}
<p>Vous êtes majeur.</p>
{% else %}
<p>Vous êtes mineur.</p>
{% endif %}
3. Boucles : Vous pouvez utiliser la directive :
{% for item in iterable %} ... {% endfor %}
pour parcourir un ensemble d'éléments. Par exemple :
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
4. Commentaires : Les commentaires sont utiles pour documenter et aider à comprendre vos templates. Tout contenu entre
{#
et
#}
sera ignoré et ne sera pas visible dans la sortie :
{# Ce commentaire n'apparaîtra pas dans la sortie finale #}
<p>Bienvenue sur notre site web !</p>
Inclusion d'Autres Templates
Vous pouvez inclure d'autres templates dans un template en utilisant la directive :
{% include 'template.html' %}
Ici, le contenu de template.html
sera inclus à cet emplacement.
Inclure un Template avec ses variables
La directive include with
permet d'inclure d'autres templates en passant des variables au template inclus.
Voici comment utiliser la syntaxe include with
:
{% for item in items %}
{% include 'template.html' with
myVariable = value
elements = item.children
%}
{% endfor %}
Les variables passées dans le template inclus seront spécifiées avec l'option with
: ici myVariable
avec la valeur value
et elements
avec la valeur item.children
. Les variables définies dans le contexte parent seront également disponibles. Le template submenu.html
utilise cette directive pour afficher un menu recursivement.