Skip to content
Extraits de code Groupes Projets
Valider 20450bf8 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

trouve_modele reprend son role initial limite au cas de modeles/

et on delegue a trouver_fond la tache de trouver un fond dans le chemin en prenant en compte son extension.

Elle s'enrichit d'un argument optionnel booleen permettant de retourner son resultat sous forme de tableau type pathinfo
dont la valeur 'extension' est toujours renseignee (meme en cas d'echec), et dont la valeur 'fond' contient le nom du fichier sans l'extension.
 
Cela permet d'eviter de mettre l'extension en dur dans styliser.
Les plugins pourront utiliser cette fonction, et continuer a etre compatible avec les anciennes versions de SPIP simplement
en la definissant si elle n'existe pas
parent cff230f3
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -35,7 +35,7 @@ function existe_formulaire($form) ...@@ -35,7 +35,7 @@ function existe_formulaire($form)
if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici if (!$form) return ''; // on ne sait pas, le nom du formulaire n'est pas fourni ici
return trouve_modele($form, 'formulaires/') ? $form : false; return trouver_fond($form, 'formulaires/') ? $form : false;
} }
......
...@@ -1826,22 +1826,51 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' ...@@ -1826,22 +1826,51 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
return $options['trim'] ? ltrim($texte) : $texte; return $options['trim'] ? ltrim($texte) : $texte;
} }
// Trouve un squelette, par defaut dans le repertoire modeles/ /**
// Attention, si le 2arg fourni, il doit avoir le / final * Trouve un squelette dans le repertoire modeles/
function trouve_modele($nom, $dir='modeles/') *
{ * @param $nom
return find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir); * @return string
*/
function trouve_modele($nom) {
return trouver_fond($nom,'modeles/');
}
/**
* Trouver un squelette dans le chemin
* on peut specifier un sous-dossier dans $dir
* si $pathinfo est a true, retourne un tableau avec
* les composantes du fichier trouve
* + le chemin complet sans son extension dans fond
*
* @param string $nom
* @param string $dir
* @param bool $pathinfo
* @return array|string
*/
function trouver_fond($nom, $dir='', $pathinfo = false) {
$f = find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir?rtrim($dir,'/').'/':'');
if (!$pathinfo) return $f;
// renvoyer un tableau detaille si $pathinfo==true
$p = pathinfo($f);
if (!$p['extension'])
$p['extension'] = _EXTENSION_SQUELETTES;
if (!$p['filename'])
$p['filename'] = ($p['basename']?substr($p['basename'],0,-strlen($p['extension'])-1):'');
$p['fond'] = ($f?substr($f,0,-strlen($p['extension'])-1):'');
return $p;
} }
function tester_url_ecrire($nom){ function tester_url_ecrire($nom){
// tester si c'est une page en squelette // tester si c'est une page en squelette
if (trouve_modele($nom, 'prive/squelettes/contenu/')) if (trouver_fond($nom, 'prive/squelettes/contenu/'))
return 'fond'; return 'fond';
// compat skels orthogonaux version precedente // compat skels orthogonaux version precedente
elseif (trouve_modele($nom, 'prive/exec/')) elseif (trouver_fond($nom, 'prive/exec/'))
return 'fond_monobloc'; return 'fond_monobloc';
// attention, il ne faut pas inclure l'exec ici car sinon on modifie l'environnement // attention, il ne faut pas inclure l'exec ici
// par un simple #URL_ECRIRE dans un squelette (cas d'un define en debut d'exec/nom ) // car sinon #URL_ECRIRE provoque des inclusions
// et des define intrusifs potentiels
return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:''; return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:'';
} }
......
...@@ -42,13 +42,10 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') { ...@@ -42,13 +42,10 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
// trouver un squelette du nom demande // trouver un squelette du nom demande
// ne rien dire si on ne trouve pas, // ne rien dire si on ne trouve pas,
// c'est l'appelant qui sait comment gerer la situation // c'est l'appelant qui sait comment gerer la situation
$squelette = trouve_modele($fond,""); // ou les plugins qui feront mieux dans le pipeline
$squelette = trouver_fond($fond,"",true);
// supprimer l'extension pour pouvoir affiner par id_rubrique ou par langue $ext = $squelette['extension'];
if ($squelette AND preg_match('/^(.*)[.](\w+)$/', $squelette, $r)) {
list(, $squelette, $ext) = $r;
} else $ext = 'html'; // valeur par defaut, historique.
$flux = array( $flux = array(
'args' => array( 'args' => array(
'id_rubrique' => $id_rubrique, 'id_rubrique' => $id_rubrique,
...@@ -58,7 +55,7 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') { ...@@ -58,7 +55,7 @@ function public_styliser_dist($fond, $contexte, $lang='', $connect='') {
'contexte' => $contexte, // le style d'un objet peut dependre de lui meme 'contexte' => $contexte, // le style d'un objet peut dependre de lui meme
'connect' => $connect 'connect' => $connect
), ),
'data' => $squelette, 'data' => $squelette['fond'],
); );
if (test_espace_prive() OR defined('_ZPIP')) { if (test_espace_prive() OR defined('_ZPIP')) {
......
...@@ -83,8 +83,10 @@ function public_styliser_par_z_dist($flux){ ...@@ -83,8 +83,10 @@ function public_styliser_par_z_dist($flux){
if (!isset($disponible[$fond])) if (!isset($disponible[$fond]))
$disponible[$fond] = z_contenu_disponible($prefix_path,$z_contenu,$fond,$ext); $disponible[$fond] = z_contenu_disponible($prefix_path,$z_contenu,$fond,$ext);
if ($disponible[$fond]) if ($disponible[$fond]) {
$flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, - strlen(".$ext")); $flux['data'] = trouver_fond("page",$prefix_path,true);
$flux['data'] = $flux['data']['fond'];
}
} }
// echaffaudage : // echaffaudage :
...@@ -142,8 +144,9 @@ function public_styliser_par_z_dist($flux){ ...@@ -142,8 +144,9 @@ function public_styliser_par_z_dist($flux){
AND $dir = explode('/',$dir) AND $dir = explode('/',$dir)
AND $dir = reset($dir) AND $dir = reset($dir)
AND in_array($dir,$z_blocs) AND in_array($dir,$z_blocs)
AND $f=find_in_path($prefix_path.$fond."-".$flux['args']['contexte']['composition'].".$ext")){ AND $f=trouver_fond($fond."-".$flux['args']['contexte']['composition'],$prefix_path,true)
$flux['data'] = substr($f,0,-strlen(".$ext")); AND $f['fond']){
$flux['data'] = $f['fond'];
} }
} }
return $flux; return $flux;
...@@ -194,10 +197,12 @@ function z_contenu_disponible($prefix_path,$z_contenu,$type,$ext){ ...@@ -194,10 +197,12 @@ function z_contenu_disponible($prefix_path,$z_contenu,$type,$ext){
* @return string * @return string
*/ */
function z_trouver_bloc($prefix_path,$bloc,$fond,$ext){ function z_trouver_bloc($prefix_path,$bloc,$fond,$ext){
if ($f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext") $f = trouver_fond("$bloc.$fond","$prefix_path$bloc/",true);
OR $f = find_in_path("$prefix_path$bloc/$fond.$ext")) if ($f['fond']) return $f['fond'];
return substr($f, 0, - strlen(".$ext"));
return ""; $f = trouver_fond($fond,"$prefix_path$bloc/",true);
// vide si rien trouve
return $f['fond'];
} }
/** /**
* Tester si un type est echaffaudable * Tester si un type est echaffaudable
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter