Programmer avec SPIP 3.0
Documentation technique sur SPIP 3.0

> > > > styliser

styliser

Ce pipeline permet de modifier la façon dont SPIP cherche les squelettes utilisés pour générer une page. Il est possible par exemple, d’aiguiller vers un squelette spécifique en fonction d’une rubrique donnée.

Ce pipeline est appelé comme suit :

  1. // pipeline styliser
  2. $squelette = pipeline('styliser', array(
  3. 'args' => array(
  4. 'id_rubrique' => $id_rubrique,
  5. 'ext' => $ext,
  6. 'fond' => $fond,
  7. 'lang' => $lang,
  8. 'connect' => $connect
  9. ),
  10. 'data' => $squelette,
  11. ));

Télécharger

Il reçoit donc des arguments connus de l’environnement et retourne un nom de squelette qui sera utilisé pour la compilation. Ainsi, en appelant une page spip.php?article18, on recevrait les arguments

  • id_rubrique = 4 (si l’article est dans la rubrique 4)
  • ext = ’html’ (extension par défaut des squelettes SPIP)
  • fond = ’article’ (nom du fond demandé)
  • lang = ’fr’
  • connect = ’’ (nom de la connexion SQL utilisée).

Exemple

Le plugin « SPIP Clear » utilise ce pipeline pour appeler des squelettes spécifiques sur les secteurs utilisés par ce moteur de blog :

  1. // définir le squelette a utiliser si on est dans le cas d'une rubrique de spipClear
  2. function spipclear_styliser($flux){
  3. // si article ou rubrique
  4. if (($fond = $flux['args']['fond'])
  5. AND in_array($fond, array('article','rubrique'))) {
  6.  
  7. $ext = $flux['args']['ext'];
  8. // [...]
  9. if ($id_rubrique = $flux['args']['id_rubrique']) {
  10. // calcul du secteur
  11. $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
  12. // comparaison du secteur avec la config de SPIP Clear
  13. if (in_array($id_secteur, lire_config('spipclear/secteurs', 1))) {
  14. // si un squelette $fond_spipclear existe
  15. if ($squelette = test_squelette_spipclear($fond, $ext)) {
  16. $flux['data'] = $squelette;
  17. }
  18. }
  19. }
  20. }
  21. return $flux;
  22. }
  23.  
  24. // retourne un squelette $fond_spipclear.$ext s'il existe
  25. function test_squelette_spipclear($fond, $ext) {
  26. if ($squelette = find_in_path($fond."_spipclear.$ext")) {
  27. return substr($squelette, 0, -strlen(".$ext"));
  28. }
  29. return false;
  30. }

Télécharger