You are viewing revision #5 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version or see the changes made in this revision.
Here's a simple way to create a breadcrumb widget to be used in your templates. The idea is just to isolate how the breadcrumb is generated based on an array of crumbs.
>Info: Please note, that new versions of Yii Framework already contain a bulit-in breadcrumbs widget. See this class reference chapter for more information. Information in this article may be, however, usable to build custom one, not descending from bulit-in one.
components/BreadCrumb.php:
<?php
class BreadCrumb extends CWidget {
public $crumbs = array();
public $delimiter = ' / ';
public function run() {
$this->render('breadCrumb');
}
}
?>
components/views/breadCrumb.php:
<div id="breadCrumb">
<?php
foreach($this->crumbs as $crumb) {
if(isset($crumb['url'])) {
echo CHtml::link($crumb['name'], $crumb['url']);
} else {
echo $crumb['name'];
}
if(next($this->crumbs)) {
echo $this->delimiter;
}
}
?>
</div>
Usage in views ¶
<?php $this->widget('application.components.BreadCrumb', array(
'crumbs' => array(
array('name' => 'Home', 'url' => array('site/index')),
array('name' => 'Login'),
),
'delimiter' => ' → ', // if you want to change it
)); ?>
note
<?php
class BreadCrumb extends CWidget
{
public $crumbs = array(); public $delimiter = ' » '; public function run() { foreach($this->crumbs as $key => $crumb) { if(isset($crumb['url'])) $this->crumbs[$key] = CHtml::link($crumb['name'], $crumb['url']); else $this->crumbs[$key] = $crumb['name']; } $crumbs = implode($this->delimiter, $this->crumbs); $this->render('breadCrumb', array('crumbs' => $crumbs)); }
}
Auto Breadcrumb Widget
In an attempt to expand on this example, I created a breadcrumb widget that automatically manages some features. Please take a look here for details:
http://www.yiiframework.com/forum/index.php?/topic/3741-auto-breadcrumbs/
note
I'm hesitant to change this myself as I did not put work into writing this article but I prefer this shorthand way of defining crumbs:
<?php $this->widget('application.components.BreadCrumb', array( 'crumbs' => array( array('Home', array('site/index')), array('Login'), ) )); ?>
eg no array keys defined.
nice one
nice explanation.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.