Ici & Là

01 Société 02 Histoire 03 Science 04 Science fiction 05 SPIP 06 NTIC 07 Sondages 08 Divers
La meilleure façon de réaliser ses rêves est de se réveiller (Paul Valéry)

Accueil > SPIP > Programmation SPIP, Développements > Utiliser SPIP comme un Framework

Utiliser SPIP comme un Framework

mardi 10 novembre 2009, par François Daniel Giezendanner

Notez cet article
0 vote

 Présentation du Framework SPIP

SPIP est non seulement un CMS polyvalent très complet et rapide c’est également une plate-forme de développement multi-serveurs SQL pour qui veut aller plus loin.

Cette plate-forme propose elle-même deux niveaux d’expertise, permettant de conserver la progressivité de la courbe d’apprentissage de SPIP tout en augmentant le nombre de services rendus.

  • Le premier niveau, déjà présent dans les versions de SPIP antérieures, s’adresse à ceux qui veulent innover graphiquement, sans avoir à programmer en SQL, PHP et JavaScript. Connaissant HTML et CSS et prêts à apprendre le système de squelettes SPIP, ils peuvent mettre en page de manière innovante des informations issues de bases de données éventuellement hétérogènes.
  • Le deuxième niveau s’adresse aux programmeurs, qui pourront écrire des extensions portables sur différents serveurs SQL, à l’aide d’une interface de programmation fondée sur un serveur virtuel SQL. Cette interface peut même être utilisée indépendamment de la base de données installée par SPIP.

 La description d’Arnaud Martin et Diala Aschkar

Sur leur site Paris Beyrouth, Arnaud Martin et Diala Aschkar expliquent dans l’article « Utiliser SPIP comme un framework » que d’une part le système de squelettes, depuis ses origines, permet de gagner des heures de développement, d’autre part depuis SPIP 1.8, et officiellement avec SPIP 2.0, une grande orientation des développements de SPIP concerne l’utilisation de SPIP comme « framework » (en français : « plateforme de développement », comme ils l’expliquent dans la présentation de la version 2.0) ; la plupart des commentaires ont tendance à ne voir cet aspect « framework » que par le prisme des plugins, alors qu’il est déjà central dans les évolutions du langage de squelettes.

Pour donner des idées aux développeurs qui voudraient avancer dans cette direction, ils détaillent quelques exemples d’utilisations de SPIP dans différentes situations. On verra qu’on peut fabriquer, directement à partir des squelettes :

  • des « noisettes » XHTML chargées dynamiquement en AJAX,
  • des fichiers de commandes Javascript,
    des fichiers XML (pour interfaçage, par exemple, avec des animations Flash, ou pour importer/exporter avec d’autres systèmes informatiques),
  • des fichiers CSV (même si ce format est plutôt dépassé),
  • des fichiers Excel,
  • des fichiers PHP directement exécutables,
  • des animations Flash avec l’extension Ming de PHP,
  • des feuilles de style CSS,
  • des fichiers d’agendas compatibles iCal...

Dans son article De l’intérêt de SPIP comme framework Cédric explique :

 Les BOUCLES : une couche d’abstraction de SQL

Mais ce langage de boucle se trouve aussi être un redoutable outil dans le cadre de développement d’application Web.

D’un point de vue développeurs, on peut considérer qu’elles consitituent une couche d’abstraction SQL avec ses avantages :

* indépendance vis à vis du moteur de requête SQL à partir de SPIP 2.0 (qui supporte nativement mySQL, PostrGreSQL et sQLite)
* optimisation systématique des requêtes ; même si un bon développeur est suceptible d’optimiser manuellement ses requêtes plus efficacement, c’est toujours bon à prendre
* cache des requêtes SQL - plus exactement ce ne sont pas les requetes SQL qui sont mises en cache, mais les pages html. Toutefois cette mise en cache permet des gains de performances significatifs, et pour certaines boucles répétitives, il est possible d’implémenter la boucle dans une inclusion dédiée, qui cachera donc le produit de la boucle
* jointures automatisées, en particulier lorsqu’on fait l’effort de normaliser son schema de BDD avec un nommage identique des champs utilisés en jointure entre tables.

 extensible...

Comme toute couche d’abstraction, elle peut être enrichie à loisir en fonction des particularités de l’application développée :

  • en définissant ses propres critères de selection
  • en définissant ses balises

Mais un des points forts qui m’a inspiré cet article, est la boucle elle même ses propriétés sous-jacentes...

Sur spip.net dans l’article « SPIP 2.0 » (de décembre 2008 — maj : 31 juillet 2009), le Framework SPIP est présenté comme suit :

 SPIP et le développement Web

Cette section décrit les outils de développements utilisés par l’équipe SPIP, outils que les développeurs tiers doivent maîtriser pour fournir des extensions portables.

De nombreux sites Web, par l’interaction qu’ils proposent aux visiteurs, sont en eux-mêmes des applications en ligne. De nombreux développements de la branche 2 sont désormais destinés à aborder la création de sites Web 2.0 : gestion de sessions d’utilisateurs, collaborations sur le site public, meilleure gestion des événements datés...

 Le serveur SQL virtuel

La nouvelle version de SPIP a nécessité un long travail de réécriture des requêtes SQL afin de le rendre portable. Ces portages reposent sur une interface de programmation qu’il suffit d’utiliser pour qu’une extension de SPIP soit elle-même portable. Elle fournit également une gestion des problèmes de sécurité de type attaque par injection de code.

Cette interface ne repose pas sur des bibliothèques pré-existantes, car leur niveau d’abstraction est insuffisant pour résoudre tous les problèmes posés, mais sur un jeu d’une trentaine de fonctions virtuelles déduites par abstraction du code antérieur de SPIP. Sa généralité lui permet même de servir à l’intégration de bases SQL hétérogènes, indépendamment des autres services rendus par SPIP.

L’interface inclut un gestionnaire de ses propres versions, qui permettra d’exécuter simultanément des extensions de SPIP utilisant différentes versions de cette interface au cas où celle-ci devrait évoluer.

Cette réécriture complète profite également à MySQL puisque les constructions SQL les plus coûteuses ont été éliminées. Ainsi, la cohérence de la base est assurée incrémentalement et non plus par un balayage complet périodiquement. Le verrouillage global du serveur a été systématiquement remplacé par des contraintes SQL refusant automatiquement une écriture concurrente à celle en cours.

Certains index ont été redéfinis pour améliorer leur efficacité. Enfin, le compilateur analyse plus finement la nécessité des jointures, le code SQL produit étant plus souvent proche de l’optimalité sur ce point.
Ces améliorations sont visibles notamment à l’aide d’un profileur SQL disponible à présent dans le débusqueur de SPIP.

La procédure de mise à jour a été elle aussi réécrite et totalement repensée. Elle gère à présent sans faillir des bases dont le volume important exigeait auparavant des outils spécifiques du serveur SQL.
Ce nouvel aspect de SPIP est décrit dans un article spécifique : L’interface de SPIP avec SQL.

 De nouveaux pipelines, appelés beaucoup plus largement

Le nombre de pipeline s’enrichit a près de 50, ainsi que leur nombre d’appels avec plus de 180 points d’entrée.

En particulier

  • les pipelines pre_edition et post_edition sont appelés systématiquement avant et après enregistrement en base de donnée d’un objet éditorial, que ce soit lors de la création, lors de la modification, ou lors de du changement de statut ;
  • le pipeline recuperer_fond permet d’agir sur le résultat de tout squelette inclus au moment de son évaluation ;
  • les pipeline pre_boucle et post_boucle permettent de modifier le comportement d’une boucle sans surcharge.

Cette extension des pipeline permet aux plugins d’agir encore plus sur le comportement de SPIP avec toujours moins de risque d’incompatibilité entre eux.

 Bibliothèques externes

SPIP fait comme phpMyAdmin pour se connecter à mysql : si l’extension n’a pas été chargée, il utilise un chargement dynamique dl(’mysql.so’), après avoir soigneusement vérifié qu’il y était autorisé. Ca permet d’installer sur des serveurs configurés de cette manière-là (ubuntu par exemple).

Une fonction SPIP permet de demander un chargement dynamique : charger_php_extension(’mysql’).

 À vous de jouer !

Ces évolutions de SPIP permettent désormais de développer, outre des sites internet usuels, des applications type intranet et toutes sortes d’applications en ligne, mêlant sessions d’utilisateurs, AJAX, pages personnalisées ou interfaces interactives évoluées.

 Webographie