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
,|mult
etc. 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).
Vos commentaires
# Le 17 décembre 2013 à 15:16, par Marion En réponse à : Pourquoi ne pas mettre de PHP dans un squelette
Bonjour,
Juste une petite remarque sur la Raison 4 : On ne profite pas de la souplesse des boucles de SPIP > « Certe il est possible de faire cela en SQL / PHP, mais pourquoi ré-inventé la roue, » Cette réflexion me laisse un peu perplexe > n’est-ce pas SPIP qui a ré-inventé une syntaxe ? N’est-ce pas du PHP dans le cœur de SPIP qui décode cette syntaxe ?
Je ne doute pas de l’efficacité et de l’intérêt des boucles SPIP mais on ne peut pas dire que c’est le PHP qui ré-invente la roue !
# Le 17 décembre 2013 à 15:21, par Maïeul En réponse à : Pourquoi ne pas mettre de PHP dans un squelette
quand je parlais de réinventer la route, c’est en ce qui concerne les requetes imbriqués et la récursivité pour du MySQL : le faire en PHP, c’est passer à côté des apports de SPIP.
Ce n’est donc pas PHP qui réinvente la roue, mais la personne qui s’amuse à coder en PHP ce qu’on peut faire en natif SPIP, et qui du coup refait le travail des dev.