Сегодня рассмотрим примеры использования виджета Breadcrumbs "Хлебные крошки" на Yii 2. Хлебные крошки это навигационная цепочка представляющая собой путь от корня сайта до текущей категории
Название «Хлебные крошки» относится к сленгу и берут свое начало в немецкой сказке «Hänsel und Gretel», в которой дети, когда их завели в лес во второй раз, не смогли найти обратную дорогу, так как на этот раз вместо маленьких камешков они оставляли за собой хлебные крошки, впоследствии склёванные лесными птицами.
В самом начале файла представления подключаем класс breadcrumbs
use yii\widgets\Breadcrumbs;
Далее задаем массив нужных нам ссылок:
$this->params['breadcrumbs'][] = [ 'template' => "<li><b>{link}</b></li>\n", // шаблон для этой ссылки 'label' => 'Категория', // название ссылки 'url' => ['/category'] // сама ссылка ]; $this->params['breadcrumbs'][] = ['label' => 'Подкатегория', 'url' => ['/category/subcategory']];
Для вывода на экран цепочки ссылок используем следующий код:
/* Если существует параметр хлебных крошек выводим хлебные крошки, иначе ни чего не выводим */ echo Breadcrumbs::widget(['links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]);
Теперь рассмотрим более конкретный пример и приведем куски кода, относящиеся к хлебным крошкам. Предположим, что у нас есть 3 таблицы (3 класса): категория организаций, подкатегория организаций и сами организации
Шаг первый, выведем хлебные крошки в категории организации. Рассмотрим программный код контроллера
public function actionCategory() { // получаем название категории $request = Yii::$app->request->get('namecategory'); // выполяем запрос к таблице категории и выбираем конкретную категорию организаций в которую мы зашли $compcatname = Categories::find()->where(['alias' => $reguest])->one(); // отправляем наши данные в представление 'category' с массивом данных по этой категории return $this->render('category', ['compcatname' => $compcatname]); }
Выводим хлебные крошки в представление
// подключаем класс use yii\widgets\Breadcrumbs; //Добавляем название категории $this->params['breadcrumbs'][] = $compcatname->name; //....... // Выводим цепочку навигации echo Breadcrumbs::widget(['links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],]);
За основу статьи взяты куски кода с сайта Визитосы.рф
Шаг второй, выведем навигационную цепочку в подкатегории организации. Таблицы в базе имею связь один ко многим. Категория организаций->подкатегория организаций-> организации
Опишем в модели подкатегории организации связь один ко многим к таблице категории организации
public function getCategories() { return $this->hasOne(Categories::className(), ['id' =>'categories_id']); }
Связь мы будем использовать для обращения к таблици категории организаций в представлении. В контроллере напишем следующий код:
public function actionSubcategory() { // Получаем алиас выбранной подкатегории $request = Yii::$app->request->get('namesubcategory'); // Выполняем запрос к таблице подкатегории $compsubcatname = SubCategory::find()->where(['alias' => $request])->one(); //........ // Передаем массив данных в представление return $this->render('subcategory', ['compsubcatname' => $compsubcatname, ]); }
Выводим хлебные крошки в представление
// Подключаем класс use yii\widgets\Breadcrumbs; // Ссылка на категорию организаций, через связь $this->params['breadcrumbs'][] = ['label' => $compsubcatname->categories->name, 'url'=> ['/companies/'.$compsubcatname->categories->alias]]; // имя подкатегории $this->params['breadcrumbs'][] = $compsubcatname->name; // Вывод виджета echo Breadcrumbs::widget(['links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],]);
Шаг третий, выведем навигацию в выбранной организации. Здесь все по аналогии с предыдущими шагами, приведем примеры программного кода
Связь модели организации с подкатегорией организаций
public function getSubCategory() { return $this->hasOne(SubCategory::className(), ['id' => 'id_comp_category']); }
В контроллере запрашиваем информацию по организации
public function actionView() { $request = Yii::$app->request->get('namecompany'); $models = Companies::find()->where(['alias' => $request])->one(); return $this->render('view', ['models' => $models,]); }
В представлении выводим навигацию
use yii\widgets\Breadcrumbs; // категория организаций $this->params['breadcrumbs'][] = ['label' => $models->subCategory->categories->name, 'url'=> '/companies/'.$models->subCategory->categories->alias]; // подкатегория организаций $this->params['breadcrumbs'][] = ['label' => $models->subCategory->name, 'url'=> '/companies/'.$models->subCategory->categories->alias.'/'.$models->idCompCategory->alias]; // название организации $this->params['breadcrumbs'][] = $models->title; // Вывод виджета echo Breadcrumbs::widget(['links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],]);