Виджет «хлебные крошки» в Yii

29 августа, 2014
Метки:

Хлебные крошки — удобный инструмент навигации. Они используются во многих проектах, поэтому проще всего написать их реализацию один раз в виде виджета и использовать этот виджет во всех других проектах.
Создадим сам виджет. Для этого в папке проекта protected/components создадим класс, отнаследованный от CWidget.

class BreadCrumb extends CWidget {
    public $crumbs = array();
    public $delimiter = '<li>>></li>';

    public function run() {
        $this->render('breadCrumb');
    }
}

Посмотрите на код. Виджет использует вьюшку с именем breadCrumb. Ее нужно создать и положить в папку protected/components/views

    <ul>
        <li>::</li>
        <li><a href="/">Главная</a></li>
        <?php echo $this->delimiter;
        foreach($this->crumbs as $crumb) {
            if(isset($crumb['url'])) {
                echo "<li>".CHtml::link($crumb['name'], $crumb['url'])."</li>";
            } else {
                echo "<li>".$crumb['name']."</li>";
            }
            if(next($this->crumbs)) {
                echo $this->delimiter;
            }
        }
        ?>
    </ul>

В моем примере, хлебные крошки выводятся в виде списка. В представлении (view) доступны все переменные класса BreadCrumb. Это значит, что если у вас хлебные крошки зависят от каких-либо дополнительных параметров, можно добавить переменную в класс BreadCrumb и условия вывода в представлении.
Осталось вызвать виджет в нужном представлении.

$this->widget('application.components.BreadCrumb', 
    array('crumbs' => array(
             array('name' => 'Настройки'),
    ) )); 

Метки:

Оставить комментарий

2 комментария »

    Андрей

    Добрый день
    А будет ли работать этот виджет в Yii2 ? Подскажите пожалуйста.
    P.S.
    Сайт очень понравился — легкий и со смыслом — без навязчивости, удачи в продвижении и новых статей по YII2.

      Developer

      Нет не будет, классы в Yii2 называются по другому. Зато в Yii2 есть уже готовый встроенный Breadcrumbs Widget

      // в layout
      <?php
      use yii\widgets\Breadcrumbs; 
      ?>
      ...
        <?= Breadcrumbs::widget([
                  'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
              ]) ?>
      ...
      // во view
      $this->params['breadcrumbs'][] = $this->title;
      

Оставить комментарий:









Копирование материалов разрешено при наличии активной ссылки на источник