Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Hello,
Beaucoup de chantiers sont en cours actuellement, et j'en ai initié un nouveau autour du moteur de templates actuel de dotclear.
Plusieurs constats :
* C'est un moteur de templates "maison" avec des limitations connues. Beaucoup de moteurs de templates sont aujourd'hui présents sur le marché, et sont plus évolués
* Le moteur est limité à la partie publique. Avec le nombre grandissant de plugins actuels, il peut être intéressant d'avoir un moteur de templates aussi pour les pages d'admins, afin de faciliter le travail des contributeurs de plugins
Après avoir fait le tour des moteurs de templates existants, il semblerait que celui qui a le vent en poupe en ce moment est Twig : http://www.twig-project.org
L'idée serait de voir si l'utilisation d'un tel moteur en remplacement du moteur actuel serait possible, et bénéfique. Il ne s'agit bien sûr pas de tout casser au niveau actuel, mais de conserver une compatibilité avec la syntaxe actuelle, tout en permettant de jouer avec des mécanismes plus avancés.
Je me suis livré à un petit test d'intégration de Twig au niveau de la partie publique, le plugin est disponible ici :
http://www.morefnu.org/public/archives/ … ig-1.1.zip
Pour le voir à l'oeuvre (ou plutôt pour ne pas le voir à l'oeuvre, vu que c'est censé être transparent), il faut le déclarer comme nouvel urlhandler : dans le fichier inc/prepend.php, remplacer :
$__autoload['dcUrlHandlers'] = dirname(__FILE__).'/public/lib.urlhandlers.php';
Par :
$__autoload['dcUrlHandlers'] = dirname(__FILE__).'/../plugins/twig/lib.twigurlhandlers.php';
Autre détail: dans inc/clearbricks/template/class.template.php, remplacer :
protected $blocks = array();
protected $values = array();
Par
public $blocks = array();
public $values = array();
Dyslexics have more fnu!
Hors ligne
Il serait intéressant de décrire brièvement (et en français ;) quelques "plus" par rapport à l'actuel permettant d'apprécier ce nouveau moteur de templates.
Le B.A.BA : https://abc.dotaddict.org
La doc DC2 : https://fr.dotclear.org/documentation/2.0
Mes extensions : https://www.mirovinben.fr/blog/index.ph … pluginsDC2
Mes marqueurs de template : https://www.mirovinben.fr/blog/index.php?post/id3553
Hors ligne
En l'état, il fournit exactement la même chose que le moteur actuel, si on ne modifie rien aux fichiers templates.
Exemple d'apport de twig : les blocs.
Mon home.html contient plein de code que je peux réutiliser dans post.html, par exemple le contenu du div id="main"
Il me suffit alors, dans home.html, au lieu de mettre :
<div id="main">
{% block main_section %}
contenu main du home.html
{% endblock %}
</div>
Mon post.html devient alors uniquement :
{% extends "home.html" %}
{% block main_section %}
... le contenu du bloc main de post.html
{% endblock %}
Après, on peut très bien envisager une syntaxe beaucoup plus simple pour les valeurs.
Exemple :
{{entry.content}} au lieu de {{tpl:EntryContent}}
On peut aussi faire des opérations arithmétiques, gérer des tableaux ... un peu comme fait le plugin expat, mais en mieux :)
Dyslexics have more fnu!
Hors ligne
Quelques exemples sont disponibles chez Twig : http://www.twig-project.org/book/02-Twi … -Designers
Dyslexics have more fnu!
Hors ligne
Cela dit l'exemple là-bas ne m'est pas beaucoup plus clair non plus :-/
Il y a une certaine confusion entre la balise {% parent %} et l'héritage du modèle étendu (reprise des blocs absents) d'après ce que j'en ai compris.
Dotclear addicted since 2004
Hors ligne
Ce que j'ai compris :
- On utilise {% parent %} pour rappatrier le contenu du même bloc déclaré dans le template parent.
- Si un bloc présent dans le template parent n'est pas présent dans le template qui étend, celui-ci est repris intégralement
Exemple :
parent.html
{% block colonne_gauche %}
…menu…
…liens…
{% endblock %}
{% block contenu_principal %}
…contenu parent…
{% endblock %}
{% block pied %}
…infos…
{% endblock %}
enfant.html
{% extends "parent.html" %}
{% block colonne_gauche %}
{% parent %}
…meta…
{% endblock %}
{% block contenu_principal %}
…contenu enfant…
{% endblock %}
La page générée pour enfant.html contiendra alors :
…menu…
…liens…
…meta…
…contenu enfant…
…infos…
Les 2 premiers sont récupérés via le {% parent %}
le dernier est récupéré parce que le bloc pied est absent
J'ai bon ?
Dotclear addicted since 2004
Hors ligne
Et rien n'empêche de prévoir par la suite un home.html avec du code du genre :
{% for entry in context.entries %}
<div class="post">
<div class="post-title">{{entry.post_title}}</div>
<div class="post-content">{{entry.post_content}}</div>
</div>
{% endfor %}
(Il n'y a presque rien à coder, tout est déjà dans twig)
Dyslexics have more fnu!
Hors ligne
Je ne suis pas du tout un sorcier, comme chacun sait, mais je me permets juste une petite réflexion personnelle : cela ne revient-il pas à faire dépendre le développement des capacités de Dotclear du développement d'un programme externe ? Que se passera-t-il, par exemple, si une demande est faite pour ajouter une fonctionnalité aux balises de Dotclear ? Ne deviendrons-nous (nous, je veux dire les utilisateurs de DC comme moi) pas dépendants de l'évolution de Twig ? Et si le développement de Twig s'interrompt un jour... ? Il faudra de nouveau rechanger le système de balises de DC ?
Je ne veux surtout pas critiquer, ce sont juste des questions qui me sont venues à la lecture de ce sujet...
Hors ligne
Dotclear est un moteur de blog, pas un moteur de templates, pas un éditeur wysiwyg, ...
Autant se centrer sur son coeur de métier. Comme je l'ai dit plus haut, le moteur de templates actuel a ses limites, et les moteurs existants font bien mieux.
Twig n'est pas la seule ressource externe : on n'a pas écrit de concurrent de jquery, et l'éditeur wysiwyg de dotclear vit aussi ses derniers jours (mois), pour laisser place à tinyMCE.
Pour en revenir à Twig, il est suffisemment flexible pour qu'on ait encore la main sur la manière de le customiser pour dotclear. Et puis il est bien soutenu, et son auteur n'est autre que le coauteur de Symfony...
Dyslexics have more fnu!
Hors ligne
Plus j'avance sur des projets utilisant d'autres logiciels, plus je trouve le principe des templates vraiment fabuleux. Si on garde la même facilité de mise en place et que cela augmente les possibilités d'utilisation, alors tout changement me convient.
Et si d'autres projets utilisent Twig, cela peut aussi attirer des personnes vers Dotclear. Donc un bon point, même si le but final n'est pas particulièrement celui-là, ça reste un effet positif.
Hors ligne
Vous n'êtes pas identifié(e).