2015-05-28 15 views
4

我的网页有多个模块,我想知道是否有添加面包屑模块​​home url的方法,而不必手动添加到所有文件。 例如:使用模块自动构建面包屑

Home > MyModule > MyController 

回答

5

的问题是definetely太广,但这里是解决方案,我用:

<?php 

namespace backend\modules\tests\components; 

use yii\helpers\ArrayHelper; 
use yii\web\Controller as BaseController; 
use yii\web\View; 

class Controller extends BaseController 
{ 
    /** 
    * @inheritdoc 
    */ 
    public function beforeAction($action) 
    { 
     if (parent::beforeAction($action)) { 
      Yii::$app->view->on(View::EVENT_BEGIN_BODY, function() { 
       $this->fillBreadcrumbs(); 
      }); 

      return true; 
     } else { 
      return false; 
     } 
    } 

    /** 
    * Fill common breadcrumbs 
    */ 
    protected function fillBreadcrumbs() 
    { 
     $breadcrumbs = []; 

     // Add needed elements to $breadcrumbs below 

     $label = 'Tests'; 
     $breadcrumbs[] = $this->route == '/tests/default/index' ? $label : [ 
      'label' => $label, 
      'url' => ['/tests/default/index'], 
     ]; 

     // ... 

     $this->mergeBreadCrumbs($breadcrumbs); 
    } 

    /** 
    * Prepend common breadcrumbs to existing ones 
    * @param array $breadcrumbs 
    */ 
    protected function mergeBreadcrumbs($breadcrumbs) 
    { 
     $existingBreadcrumbs = ArrayHelper::getValue($this->view->params, 'breadcrumbs', []); 
     $this->view->params['breadcrumbs'] = array_merge($breadcrumbs, $existingBreadcrumbs); 
    } 
} 

正如你所看到的,它是基于视图事件和自定义控制器(从yii\web\Controller延伸)。

接下来你需要的是从自定义控制器扩展需要的控制器。

+0

这个问题并不广泛 - 它非常简单。我将改为: “您如何在Module文件中设置面包屑,以便您不必在模块(模型/控制器/视图)中放置重复的块?” 您提供的信息有用,但没有解决这个问题。 – nssmart