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 :

// pipeline styliser
$squelette = pipeline('styliser', array(
    'args' => array(
        'id_rubrique' => $id_rubrique,
        'ext' => $ext,
        'fond' => $fond,
        'lang' => $lang,
        'connect' => $connect
    ),
    'data' => $squelette,
));

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 :

// définir le squelette a utiliser si on est dans le cas d'une rubrique de spipClear
function spipclear_styliser($flux){
    // si article ou rubrique
    if (($fond = $flux['args']['fond'])
    AND in_array($fond, array('article','rubrique'))) {
       
        $ext = $flux['args']['ext'];
        // [...]
        if ($id_rubrique = $flux['args']['id_rubrique']) {
            // calcul du secteur
            $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
            // comparaison du secteur avec la config de SPIP Clear
            if (in_array($id_secteur, lire_config('spipclear/secteurs', 1))) {
                // si un squelette $fond_spipclear existe
                if ($squelette = test_squelette_spipclear($fond, $ext)) {
                    $flux['data'] = $squelette;
                }
            }
        }
    }
    return $flux;
}

// retourne un squelette $fond_spipclear.$ext s'il existe
function test_squelette_spipclear($fond, $ext) {
    if ($squelette = find_in_path($fond."_spipclear.$ext")) {
        return substr($squelette, 0, -strlen(".$ext"));
    }
    return false;
}

Auteur Matthieu Marcillaud Publié le : Mis à jour : 26/10/09

Traductions : English, français