PHP CONCEPTUEL
(ou FTM : Function Tag Mapping with PHP)
Lorsqu'on débute en PHP ou lorsqu'on doit écrire directement du code XHTML via PHP, il n'y a souvent pas de «bonne» solution standard. Et on doit alors écrire du code "horrible" comme :
<?php # exemple de "mauvais" code PHP pour produire du XHTML valide $titre = " Mon titre de niveau 1 " ; echo "<h1> $titre </h1>\n" ; # un autre exemple, encore pire : echo "<h1 class='grouge'>" ; echo " Mon titre de niveau 1 " ; echo "</h1>" ; ?>Il nous semble que ce code est mauvais parce qu'il mélange les langages PHP, HTML et CSS (et encore, nous n'avons pas inclus de Javascript !). Si on ne veut pas recourir pas à des templates, il serait bon, comme en PHP/ORM au moins de masquer les codes HTML, CSS et Javascript par des fonctions ou des méthodes objets de PHP. A la réflexion, le mécanisme objet est sans doute trop "lourd" pour des débutants et nous proposons donc une libraire de fonctions PHP pour masquer ce qui sera interprété coté serveur. Ainsi l'exemple précédent devient
<?php include("std.php") ; # notre librairie dite "conceptuelle" # exemple de "bon" code PHP pour produire du XHTML valide $titre = " Mon titre de niveau 1 " ; h1($titre) ; # un autre exemple, avec style h1("Mon titre de niveau 1","grouge") ; ?>Nous avons donc "doublé" les éléments XHTML usuels par des fonctions qui affichent directement ou qui renvoient des chaines de caractères, de façon à n'avoir que du PHP à écrire (et surtout à relire). On trouvera à l'adresse stdphp.php une page interactive pour voir comment utiliser ces fonctions, sachant que la seule chose à faire pour les utiliser est d'inclure le fichier std.php en début de fichier PHP.
Cela n'aurait pas de sens de ne pas fournir aussi un fichier de style prêt à l'emploi et il se nomme bien sûr std.css. En bon pédagogue, le fichier std.php requiert le fichier strfun.php, disponible aussi dans l'archive std.php.zip.
Voici quelques avantages à utiliser ce système de liaison entre balises et fonctions PHP (FTM ou Function Tag Mapping en anglais) :
chaque élément de HTML comme h1 ou p est remplacé par une fonction PHP, même span ;
les attributs comme border pour table sont accessibles via les paramètres (non obligatoires) des fonctions avec des valeurs par défaut en principe bien choisies ;
il est possible de passer les id et les noms de style CSS en paramètre ;
la fonction debutPage permet de choisir le type de grammaire, de passer un ou plusieurs fichiers de styles CSS et de passer un ou plusieurs fichiers de scripts javascript à charger dans le head, le tout en mode externalisation non intrusive. Voir stdphp.php?lafns=debutPage pour les détails ;
pour les formulaires, tout est prévu et même plus si affinité !
enchaîner des fonctions XHTML valides qui ouvrent et ferment elles-même les balises et qui ajoutent un retour-charriot en fin de balise produit automatiquement un code XHTML valide aéré...
Soyons honnêtes, il y a aussi quelques désavantages :
- il faut apprendre de nouvelles fonctions (heureusement, leur nom est calqué sur celui des éléments XHTML) ;
- la syntaxe des paramètres de ces nouvelles fonctions est parfois un peu "lourde" ou "non intuitive" (heureusement, il y a une page stdphp.php pour les relire rapidement avec des exemples d'utilisation) ;
- il s'agit d'une petite libraire que les étudiant(e)s doivent compléter (cela faire partie de mes exercices standards) ;
- il y a quelques intrus comme les fonctions pour MySql ou les méthodes objets des tables des matières cliquables ;
- il faut passer un peu de temps avec std.css pour en tirer pleinement profit...
Enfin, comme une démonstration vaut mieux qu'un grand discours, cliquez sur le lien orange en bas et vous constaterez que toute cette page qui est XHTML Strict valide ne contient pas une seule balise apparente... (il suffit de recherche le symbole < dans la page-source).
Au fait, avez-vous remarqué que la dernière liste à puces était... à tirets dans cette page, sans ces "horribles" «bullets» ? C'est très simple à implémenter... en PHP conceptuel !
Retour à la page principale de (gH)