mdhtmltag

Analyse du besoin

Dès mes premiers sites web, j'ai eu deux principales obsessions :

  • générer un code HTML correctement formaté, indenté et encodé
  • générer un code HTML valide respectant les standards du W3C

Cette nécessité implique soit de développer uniquement en HTML avec n'importe quel éditeur de texte soit de faire en sorte que le langage qui génère le code HTML permette d'avoir la main sur toutes les composantes du code à générer. De nos jours, la plupart des sites sont développés sur la base de langages dynamiques. Ces langages dynamiques sont là pour aider à l'accélération du développement d'un site mais pas forcément pour aider à générer du code HTML valide et facilement lisible. Ceci a pour conséquence de générer un code HTML souvent très volumineux avec beaucoup d'espaces, beaucoup de sauts ligne inutiles entre les différentes balises HTML et de ne pas toujours encoder les caractères spéciaux - utile pour s'assurer d'un bon affichage par les différents navigateurs.

Attention, ce n'est pas une extension miracle : elle ne corrige pas les erreurs syntaxiques que vous avez pu faire dans votre code. Il faut au préalable avoir généré un code syntaxiquement valide pour qu'il soit ensuite généré proprement. Cette "contrainte" vient du fait que les classe se basent sur la classe DOM native de PHP, qui n'accepte donc que des structures XML valides.

Configuration PHP requise

Cette extension utilise un ensemble de classes qui font appel aux classes natives DOM disponibles depuis la version 5 de PHP.

Structure du développement

Cette extension contient :

  • des classes : les classes de représentations de la majorité des balises HTML valides. La classe OutputFilterClass permet de prendre en charge l'appel de type filter par la déclaration dans le fichier site.ini , section OutputSettings du paramètre OutputFilterName.
  • des settings :
    • site.ini : déclare l'OutputFilterName
    • htmltag.ini : défini l'ensemble des paramètres de configuration possible pour l'extension

Configurations possibles

La configuration se passe principalement dans le fichier htmltag.ini. Voici en détail son contenu :

#Settings for the htmltag extension [Settings] #Enable or not the deletion of comments tags KeepCommentsTags=false #Enable or not the definition of the id attribute for each html tag DefineEveryTagsId=false #Enable HTML compression (by eliminating whitespaces and line breaks) CompressHtml=disabled [ReplaceStrings] #Defines the caracters strings to replace when formatting the Html source code Froms[] Tos[] #Take exemple from the default settings #transform href target attribute when value equal to _self by empty string Froms[]= target="_self" Tos[]= #transform href target attribute when value equal to _blank by a valid attribute Froms[]= target="_blank" Tos[]= onclick="window.open(this.href);return false;" #transform u tags to span class="text-underline" Froms[]=<u> Tos[]=<span class="text-underline"> Froms[]=</u> Tos[]=</span> #Useless code Froms[]=style="border: 0px  ;" Tos[]= [Customs] #Allows to define valid custom HTML tags not present in the DTD CustomTags[] #For exemple new HTML5 tags #CustomTags[]=section #CustomTags[]=article #CustomTags[]=video #Allows to define valid custom HTML attributes not present in the DTD CustomAttributes[] #For exemple, jquerymobile HTML attributes #CustomAttributes[]=data-theme #CustomAttributes[]=data-role #CustomAttributes[]=date-position

Utilisation de l'extension

Afin d'activer cette extension, il vous suffit de :

  • rajouter l'extension mdhtmltag dans la liste des extensions chargées par votre siteaccess
  • régénérer l'autoload des classes : bin/php/ezpgenerateautoloads.php -e
  • vérifier que l'extension fonctionne :
    • l'extension défini des balises meta, mais tout dépend de votre méthode pour générer le contenu de la balise head de votre site
    • le code HTML est correctement indenté, encodé voire compressé s'il est valide syntaxiquement
    • le code source contient les commentaires suivants : <!-- HTML Generation Time : [...] sec. --><!-- Memory Usage : [...] octets -->

Pour information, ce site utilise cette extension, vous pouvez donc vous rendre compte du résultat.

Axes d'améliorations/évolutions

Comme tout développement, ce dernier répond à mes besoins et à des besoins que j'ai essayé d'imaginer en fonction de mes expériences, cependant, on peut imaginer le faire évoluer en ajoutant :

  • une gestion des éléments du DOM
  • l'utilisation d'expressions régulières pour le remplacement
  • l'utilisation de l'événement response/preoutput ou response/output en lieu et place de l'utilisation de OutputFilterName
  • améliorer la gestion de pages HTML5

Si vous pensez à d'autres améliorations et évolutions, n'hésitez pas à m'en faire sur la page projet de la plateforme de votre choix dans les ressources listées ci-dessous.

Ressources

Mots clefs :