Raison 1 : On ne profite pas du cache de SPIP
SPIP dispose d’un système de cache, qui évite de refaire trop souvent des calculs, et donc accélère les pages. Les parties PHP d’un squelette SPIP ne sont pas soumis à ce système, du coup on perd un des avantages de SPIP.
Raison 2 : C’est illisible
Bien souvent, pas toujours, ces « squelettes » sont illisibles, car le code PHP n’est pas bien structuré. Ce n’est pas toujours le cas, mais très souvent. Je pense que les personnes qui utilisent cela « bidouillent » car ils n’arrivent pas à faire ce qu’ils veulent en SPIP. Bien sûr, on pourrait imaginer un squelette SPIPHP lisible, mais je n’en ai jamais vu.
Raison 3 : Ce n’est pas optimisé
Il m’est arrivé de voir des requêtes SQL directement dans un squelette SPIP ! Alors même que SPIP est un méta-langage de requêtes SQL, qui les optimise automatiquement. J’ai vu par exemple des appels via mysql_query() à des champs qui ne seront jamais utilisés dans la page. SPIP lui n’appel que les champs réellement utiles (ceux qu’on insère dans la page avec #CHAMP).
Raison 4 : On ne profite pas de la souplesse des boucles de SPIP
Les boucles de SPIP possèdent des ressources insoupçonnées : récursivité des requêtes, requêtes imbriquées. Certe il est possible de faire cela en SQL / PHP, mais pourquoi ré-inventé la roue, d’autant plus que SPIP, la lecture sera plus claire.
Raison 5 : On ne profite pas de SPIP
Et oui, SPIP c’est prévu pour pouvoir faire directement les requêtes SQL dans la « trame », dans le « moule » de l’affichage souhaité. Si on en profite pas, alors pourquoi prendre SPIP et pas un autre CMS ?
Une exception : pour gérer certains élèments de session
Toute règle à ses exceptions. C’est le cas de la présente règle. On lira un article qui explique pourquoi, pour gérer les sessions, mettre du PHP dans certains squelettes peut-être une solution.
Comment faire
Ceci n’est pas exhaustif, mais je tenterai de donner quelques indications pour les gens venant du monde PHP pour se « convertir » en SPIP.
- Une requête SQL = Une Boucle SPIP. Pour ceux qui ont besoin d’une explication formaliste, grammaticale de ce qu’est une boucle SPIP : http://programmer.spip.org/-Les-boucles-
- Pour modifier le résultat d’une balise SPIP = d’un champ SQL : un filtre = une fonction à définir dans mes_fonctions.php. Définition formelle d’une balise : http://programmer.spip.org/-Les-balises-, définition formelle d’un filtre : http://programmer.spip.org/-Les-filtres-de-balises-
- Une variable de compteur :
- Si c’est pour compter les résultats d’une requête SQL :
#COMPTEUR_BOUCLE. Ex :<BOUCLE_a(ARTICLES)>itération #COMPTEUR_BOUCLE </BOUCLE_a> - Si la variable est plus compliquée :
#SET{variable,valeur},#GET{variable}et les filtres mathématiques :|plus,|multetc. http://www.spip.net/fr_article901.html - Une variable tout court : voir ci dessus.
- Si c’est pour compter les résultats d’une requête SQL :
- Des tests conditionnels :
- filtres de comparaison et filtres de test : http://programmer.spip.org/Filtres-de-comparaison http://programmer.spip.org/Les-filtres-de-tests.
- Et pour conditionner en fonction du résultat de la requête SQL : la syntaxe complète des boucles : http://programmer.spip.org/Syntaxe-complete-des-boucles
- Des tableaux : la balise
#ARRAY: http://www.spip.net/fr_article4009.html
Voilà, avec ça vous avez les bases pour ne plus mettre de PHP dans vos squelettes (bien sûr, il faut lire les liens ! Ceci n’est pas un tutoriel).