Version 3 — Janvier 2019 — JLuc
- Doc officielle : https://programmer.spip.net/styliser assez complète
Le pipeline styliser reçoit $flux tableau avec 2 les index :
- data et args [args] [fond] : fond sans html. Ce peut être le résultat d’un find_in_path dont on a enlevé l’ext. .html.
- [args][ext] : html si statique ou php sinon
- [args][contexte] : environnement
- [data] : c’est le squelette à modifier s’il est là et à renvoyer. C’est une adresse absolue de fichier, contrairement à un « fond » qui peut se trouver en différentes parties des squelettes spip. On peut convertir un fond en squelette via un appel à find_in_path
ou à chemin
, et il faut ensuite enlever l’extension .html pour le mettre dans ’data’.
- args : tableau de description de l’environnement, avec
php}
On peut le surcharger pour redéfinir public_styliser.
Au besoin , la La fonction redéfinie peut appeler la version originale et la compléter. Par exemple dans phpBB :
function public_styliser($fond, $id_rubrique, $lang='', $connect='', $ext='html') {
/* EXTRAITS */
$spipbb_meta = @unserialize($GLOBALS['meta']['spipbb']);
if (!is_array($spipbb_meta) OR ($spipbb_meta['configure']!='oui') OR empty($spipbb_meta['id_secteur'])) {
include_once(_DIR_RESTREINT.'public/styliser.php');
return public_styliser_dist($fond, $id_rubrique, $lang, $connect, $ext);
}
...
}
</ cadre >
{{{Exemples d'usages}}}
{{CVT multiétapes}}
<cadre class='php'>
function cvtm_styliser($flux){
if (strncmp($flux['args']['fond'],'formulaires/',12)==0
AND isset($flux['args']['contexte']['_etapes'])
AND isset($flux['args']['contexte']['_etape'])
AND ($e=$flux['args']['contexte']['_etape'])>1
AND $ext = $flux['args']['ext']
AND $f=$flux['data']
){
preg_match("#formulaires\/.*#",$f,$matches);
$f = chemin($matches[0]."_".$e.".".$ext);
$flux['data'] = substr($f,0,strlen($f)-strlen($ext)-1);
}
return $ flux ;
}
</ cadre </cadre >
{{courtcircuit}}
courtcircuit n'altère pas le champ data, mais fait une redirection par entête http !
La fonction courtcircuit_url_redirection prend en compte les interventions possibles d'autres plugins :
- variantes de squelettes (par rubrique, langue)
- compositions
- polyhierarchie
<cadre class='php'>
function courtcircuit_styliser($flux){
if ($flux['args']['fond'] == 'rubrique' AND $id_rubrique = $flux['args']['id_rubrique']) {
include_spip('inc/courtcircuit');
$url_redirect = courtcircuit_url_redirection($id_rubrique);
if ($url_redirect!='')
redirige_par_entete($url_redirect,'','301');
}
return $flux;
}
spip_mashup
function spip_mashup_styliser($flux) /* EXTRAITS */
{ global $spip_version_branche;
// On est dans une rubrique
if (($fond = $flux['args']['fond'])
AND $flux['args']['ext']="html")
{
if ($flux['args']['contexte']['ajax_mashup'])
{ // Recherche du squelette
$base = find_in_path("mashup_$fond.html");
$squelette = substr($base, , - 5);
$flux['data'] = $squelette;
}
else if ($fond == 'rubrique')
{
...
$base = find_in_path("mashup.html");
$squelette = substr($base, , - 5);
$flux['data'] = $squelette;
}
}
return $flux;
}
parametrer_par_motcle
parametrer_par_motcle, pour SPIP 2 seulement, non seulement définit le pipeline styliser, mais surcharge aussi public/parametrer.php et public/styliser.php pour parvenir à ses fins !