Carnet Wiki

Version 5 — Janvier 2019 JLuc

La doc officielle : https://programmer.spip.net/styliser est assez claire.

Comme bien expliqué sur la doc : https://programmer.spip.net/styliser , le Le pipeline styliser reçoit $flux, tableau avec 2 index : data et args

-  [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 fond (fond SPIP = sans extention html), ext : (html si statique ou php sinon), contexte : tableau des variable d’environnement, id_rubrique : la rubrique et connect (sql).

Par exemple :

data=plugins/prefixeplugin/squelettes/liste/articles-resume-fixe
args=Array (
    [id_rubrique] => 21
    [ext] => html
    [fond] => liste/articles-resume-fixe
    [lang] => fr
    [contexte] => Array (
        [page] => articles
        [id_rubrique] => 21}}}
        [date] => 2019-01-10 12:52:56
        [date_default] => 1
        [date_redac] => 2019-01-10 12:52:56
        [date_redac_default] => 1
        [type-page] => articles
        [composition] => 
        [lang] => fr
        [nb] => 1
    )
    [connect] => 
)

fichier public/styliser.php

C’est surement pas conseillé mais on On peut le surcharger pour redéfinir public_styliser.

Au besoin, 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);
	}
...
}

Exemples d’usages

CVT multiétapes

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;
}

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

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.