Finalement j'ai implementé mon fil d'ariane en m'inspirant de vos infos.
Pour ceux que ca pourrait interesser voici comment je l'ai fait :
J'ai une classe chemin qui gère la construction et la mémorisation en session du chemin de fer :
Mon chemin de fer est géré avec des niveau. Chaque action doit savoir à quel niveau du chemin elle va intervenir.
La page d'accueil est le niveau zero, la methode index que chaque controller est le niveau 1, les autres sont en niveau 2 voir 3,...
Chaque action mets a jour le fil d'ariane de la facon suivante :
1 2 3 4 5 6 7
|
// je mets a jout le fil d'ariane de niveau 1
Chemin::enregistrer(2,"Mes potagers");
ou
// je mets a jout le fil d'ariane de niveau 2 avec un libelle de lien dynamique
Chemin::enregistrer(2,$this->view->potager->nom); |
Voici la classe de gestion du chemin de fer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <?php
class Chemin {
public static function init () {
// initialisation
$chemin = self::getChemin();
}
public static function enregistrer ( $niveau , $label ) {
$fc = Zend_Controller_Front::getInstance();
$url =$fc->getRequest()->getRequestUri();
// je récupère le chemin en mémoire
$chemin =self::getChemin();
// si je suis plus haut que le niveau actueln j'efface tous les niveaux inférieurs
$niveau_actuel = count($chemin)+1;
if ($niveau_actuel>$niveau) {
for ($i=$niveau;$i<=$niveau_actuel;++$i) {
unset($chemin[$i]);
}
}
// j'enregistre le nouveau niveau actuel
$chemin[$niveau]=array('label' => $label , 'url' => $url , 'niv' => $niveau);
// je mets en session
self::saveChemin($chemin);
}
// mémorisation du chemin
private static function saveChemin ($chemin) {
// je le remets en session
$cheminNS= new Zend_Session_Namespace('Chemin');
$cheminNS->chemin = $chemin;
}
// récupération du chemin en session
public static function getChemin () {
$cheminNS= new Zend_Session_Namespace('Chemin');
if (isset($cheminNS->chemin)) {
$chemin=$cheminNS->chemin;
} else {
// s'il n'existe pas je l'initialise et je le mets en session
$chemin = array();
$chemin[0]= array('label' => 'Accueil' , 'url' => '/', 'niv' => 0);
// je le remets en session
$cheminNS->chemin = $chemin;
}
return $chemin;
}
} |
ensuite j'ai un helper qui fait la mise en page, avec un appel dans mon layout
<div id="ariane"><? echo $this->cheminDeFer(); ?></div>
Voici le helper du fil d'ariane
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
<?php
class Zend_View_Helper_CheminDeFer
{
public function cheminDeFer() {
// je crécupère le chemin
$chemin = Chemin::getChemin();
$output = '';
$sep="";
foreach($chemin as $link) {
$output .= $sep.'<a href="'.$link['url'].'">'.$link['label'].'<a> ';
$sep=" > ";
}
return $output;
}
} |
Il me reste un petit problème c'est que je gère également quelques raccourcis de navigation dans mon site et que je peux retourner a un emplacement de niveau 2 directement depuis n'importe quel point du site et que dans ce cas, seul le niveau 2 est mis a jour et il se retrouve donc en incohérence avec les niveaux supérieurs qui correspondent à l'emplacement précédent.
Voila, j'espere que ca pourra aider quelqu'un
Nat
Partager