Comparatif

Introduction

Avant d'opter pour ce système, j'ai d'abord voulu essayer des méthodes plus classiques, et qui paraissent dans un premier abord moins lourdes. Je vais donc étudier ici les avantages et les inconvénient de ces systèmes, et ce que mts apporte de plus. Je me doute qu'il y a certainement presque autant de méthode que de développeurs sur l'internet, pas la peine de mailer pour me dire que je généralise; je le sais. Cependant si vous avez une méthode bien à vous que vous jugez meilleure, ca m'intéresse, donc faites- moi signe :).

Les différents système de template

Système include("header.php");

La méthode la plus classique de templates est un système d'include basique; c'est à dire, recopier à différents endroits de la page une portion de code externalisée dans un fichier. Par exemple, chaque fichier ne contiendra que le contenu de la balise <body>, et un include("header.php" au dessus rajoutera les meta, titre, menu etc, et un include("footer.php") rajoutera un pied de page et fermera toutes les balises.

Avantages
Simplicité de mise en place, aucune connaissance particulière n'est requise.
Les modifications des fichiers inclus se répètent sur toutes les pages.
Désavantages
A moins de définir pour chaque page autant de variables PHP que d'informations, toutes les informations contenues dans les includes seront les mêmes pour toutes les pages. Finies CSS personnalisées, titre, metas..
Chaque fichier contient des informations sur quel fichier inclure. Par conséquent, si pour tout un groupe de fichier, vous voulez changer l'include, il faut modifier l'include dans tous les fichiers.
Du fait que les fichiers sources contiennent des informations relatives au fonctionnement du site, en cas de modification du fonctionnement de ce dernier, tous les fichiers de données seront à modifier.

Systeme template.php?file=index

Il s'agit grosso modo d'un système similaire à celui du dessus, mais en un brin plus évolué. Ce coup ci, le fichier de données ne contient plus d'include; il contient uniquement le texte de la page, en bref le <body>. Le principe est de ne pas appeler le fichier de données lui même, mais un autre fichier de template, avec comme argument le nom du fichier de données. Je ne critique pas ce système, car c'est d'une certaine manière celui que j'utilise pour mts, mais plutôt la manière dont cela est réalisé la plupart du temps. D'ordinaire, ce fichier template contiendra un en-tête commun à tous les fichiers inclus par ce fichier, un pied de page commun également, et se contentera de faire un include() du fichier de données.

Avantages
Simplicité de mise en place, aucune connaissance particulière n'est requise.
Les modifications des fichiers template se répètent sur toutes les pages.
Le code source contient moins d'informations relatives à la structure du site.
Désavantages
Ce système est malheureusement utilisé sans système de réécriture d'url. Du coup, il devient compliqué de bookmarquer les pages d'un site, ou de parcourir son historique, et apporte souvent un mauvais référencement.. Cela peut cependant bien sûr être corrigé.
Même problême que ci dessus, perte d'informations spécifiques à la page (titre, metas, etc).

MTS

Le principe ressemble partiellement au système ci dessus dans le sens ou ce n'est pas le fichier de données qui est exécuté (par exemple si je demande le fichier toto.html, ca ne renverra pas toto.html mais templates/common.tpl.php?page=toto.html). La différence réside dans le format des données (toto.html) et de la facon dont les données seront utilisées pour générer le document final. Le principe est que le fichier de donnée doit être en xhtml, et ne doit contenir aucune information de présentation; ni en-tête, ni pied de page, ni menu.. Cependant, du coup il pourra contenir tout ce qui est meta, titre etc. MTS utilise une règle de réécriture d'url afin que le système soit transparent pour l'utilisateur (l'utilisateur demandera bien toto.html et non pas templates.php etc dans son navigateur). La template utilisera un mécanisme de traitement d'xml (pour l'instant uniquement du xslt, mais un traitement via le moteur de xml de php peut être envisagée.. bien que beaucoup plus lourd à écrire.).

Avantages
Séparation totale des données et du système de template. Les données sont en xhtml et contiennent toutes les informations nécessaires pour être lues, au cas ou MTS serait en panne, par exemple ^^.
Une grande abstraction est rendue possible via le système de traitement de XML (xslt); toutes les données peuvent être manipulées..
Le système de cache permet de ne pas refaire le traitement xslt à chaque requête, ce qui permet une relative rapidité.
Désavantages
MTS comprend deux gros points noirs. Tout d'abord, pour le moment, un moteur de xslt est nécessaire. Sablotron, xslt_proc, à votre guise, mais ceux là sont très rarement installés sur des hébergements mutualisés. Free, multimania, passez votre chemin.
Deuxième inconvénient, et de taille, vos fichiers de données doivent _impérativement_ être des fichiers valides xhtml. On peut éventuellement utiliser htmltidy pour convertir des fichiers html vers des fichiers xhtml, c'est ce qui a été fait pour docs.eu.org.
Des connaissances (basiques) en xslt sont nécessaires.

Conclusion

Maintenant que vous êtes au courant des avantages et des inconvénients de chaque système, à vous de faire votre choix. MTS est peut-être inutile pour de très petits sites, pour lesquels on peut tout faire directement en HTML. On se rend compte de son utilité dès qu'un site dépasse une vingtaine de page. Cependant, étant donné la simplicité d'installation du système, pourquoi se priver une fois qu'on a compris le mode de fonctionnement :). Cependant, n'oubliez pas que MTS est à la base une idée, et que mon code n'en est qu'une implémentation. Autant j'utilise le rewrite pour faire directement les associations page/template, et le xslt pour la transformation, autant on pourrait gérer ca de manière totalement différente et utiliser une base de données pour dire quel fichier utiliser avec quel fichier de données, et faire un traitement PHP du xml afin de rajouter les données qui vont bien.