Afficher le chemin parcouru dans une arborescence

Dernier article de notre série sur la gestion et la présentation d’une arborescence, nous allons voir ici comment afficher le chemin parcouru dans l’arborescence, sous la forme : Catégorie 1 > Catégorie 1.2 > Catégorie 1.2.8, en utilisant deux méthodes peu connues du Helper Html, addCrumbs et getCrumbs.

1. Détermination du chemin parcouru

Nous allons appeler la méthode getpath, automatiquement ajoutée au Modèle Category par le Comportement Tree, qui renvoie un tableau avec tous les ancêtres d’une catégorie, elle-même incluse à la fin du tableau. Nous plaçons cette logique dans l’action view du Controller Categories :

// {app}/controllers/categories_controller.php
function view($id = null)
{
	// La catégorie
	$this->set('category', $this->Category->read(null, $id));
 
	// La liste de ses ancêtres
	$this->set('path', $this->Category->getpath($id));
}

Nous passons à la vue les données de la catégorie choisie, sous le nom $category, et le tableau de ses ancêtres, sous le nom $path.

2. Affichage

2.1 La méthode HtmlHelper::addCrumb

Cette méthode du Helper Html permet d’ajouter une “tranche” au chemin parcouru, sous forme d’un lien ou d’un texte simple. Nous voulons dans notre cas que le chemin permette de remonter facilement dans l’arborescence, les ancêtres de la catégorie en cours devront donc être cliquables, mais pas la catégorie elle-même puisque nous y sommes déjà.

// {app}/views/categories/view.ctp
foreach($path as $crumb)
{
	$url = null;
 
	// Catégorie en cours ?
	if($crumb['Category']['id'] != $category['Category']['id'])
	{
		$url = $html->url(array($crumb['Category']['id']));
	}
 
	$html->addCrumb($crumb['Category']['libelle'], $url);
}

2.2 La méthode HtmlHelper::getCrumb

Nous n’avons plus qu’à afficher notre chemin avec la méthode getCrumb, à qui nous indiquons que nous souhaitons séparer les tranches du chemin par le signe “>” ou “strictement supérieur à”, dont l’entité html s’écrit “>”.

// {app}/views/categories/view.ctp
<div id="breadcrumbs">
	<strong>Vous êtes ici :</strong> <?php echo $html->getCrumbs(' &gt; '); ?>
</div>

Nous obtenons un joli chemin sous la forme :
Vous êtes ici : Catégorie 1 > Catégorie 1.2 > Catégorie 1.2.8.

Pierre-Emmanuel Fringant

Commentaires

Merci beaucoup pour ce blog qui m’a permis de me faire la main avec CakePHP en complétant efficacement la doc de cake :)

De rien !

Participez

Pour insérer une portion de code, utilisez <pre lang="php">...</pre>