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:
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
$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 ));
Total 4 comments
nice explanation.
<?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)); }}
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/
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:
eg no array keys defined.
Leave a comment
Please login to leave your comment.