Yii2基础版集成Twig扩展后面包屑功能无法正常使用求助
嘿,我之前也在Yii-Twig环境里踩过面包屑配置的坑,给你梳理下能搞定的步骤,应该能还原默认演示站点的效果:
第一步:在控制器里正确赋值面包屑数据
Yii的面包屑依赖view->params['breadcrumbs']数组传递数据,你需要在每个页面的控制器动作里添加赋值代码。比如:
// SiteController.php public function actionIndex() { // 首页的面包屑(只有首页链接) $this->view->params['breadcrumbs'][] = ['label' => '首页', 'url' => ['site/index']]; return $this->render('index'); } public function actionAbout() { // 关于页面的面包屑:首页 -> 关于我们 $this->view->params['breadcrumbs'][] = ['label' => '首页', 'url' => ['site/index']]; $this->view->params['breadcrumbs'][] = '关于我们'; // 没有url的话直接写字符串 return $this->render('about'); }
第二步:在Twig布局里渲染面包屑组件
你需要在main.twig里引入面包屑组件,并在合适的位置(比如页面内容上方)渲染它。修改你的main.twig如下:
{{ use('app/assets/AppAsset') }} {{ use('yii/widgets/Breadcrumbs') }} <!-- 引入面包屑组件 --> {{ register_app_asset() }} {{ this.beginPage() }} <!DOCTYPE html> <html lang="{{ app.language }}"> <head> <meta charset="{{ app.charset }}"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> {{ this.registerCsrfMetaTags() }} <title>{{ this.title }}</title> {{ this.head() }} </head> <body> {{ this.beginBody() }} <div class="container"> <!-- 面包屑区域:只有当有数据时才显示 --> {% if this.view.params.breadcrumbs is not empty %} {{ breadcrumbs_widget({ 'links': this.view.params.breadcrumbs, 'options': { 'class': 'breadcrumb' <!-- 用Bootstrap的面包屑样式,和默认演示一致 --> } }) }} {% endif %} <!-- 页面内容 --> {{ content }} </div> {{ this.endBody() }} </body> </html> {{ this.endPage() }}
几个容易踩的坑要注意
- Twig组件调用语法:Yii的驼峰命名组件在Twig里要转成小写加下划线,比如
Breadcrumbs对应breadcrumbs_widget(),别写错了! - 样式问题:确保你的
AppAsset里加载了Bootstrap样式(或者Yii默认的site.css),否则面包屑会是纯文本,没有默认演示的样式效果。比如AppAsset.php里可以加上:public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', // 加上这个加载Bootstrap样式 ]; - 空数据判断:加上
{% if this.view.params.breadcrumbs is not empty %}可以避免没有面包屑数据时显示空的组件容器。
按照这个流程操作,应该就能实现和Yii默认演示站点一模一样的面包屑效果啦!
内容的提问来源于stack exchange,提问作者AeroMaxx
相关产品推荐
相关产品推荐

