保留在默认控制器上的 Codeigniter 导航栏类别

Codeigniter navbar categories staying on default controller

我在查看我的家(默认控制器)时可以查看动态类别,但是当我单击注册或登录按钮时,类别失败;因为 foreach 似乎在这些页面上不起作用,我将用我的代码进行解释。

控制器(home.php - 默认控制器)

 public function index()
       {    
    $data['mcats'] = $this->Categories_model->get_categories();
    foreach($data['mcats'] as $key => $val){
        $subcats = $this->Categories_model->get_categoriesSub($val['cid']);
        if($subcats){
            $data['scats'][$val['cid']] = $subcats;
        }
    }
    $this->load->view('home', $data);
}

查看(navigation.php)

<ul class="navbar-nav mr-auto">   
    <?php
      foreach($mcats as $key =>$val) {
        ?>
        <li class="nav-item">
          <a class="nav-link" href="<?=$val['cid'];?>"><?=$val['category'];?></a>
        </li>
        <?php
      } ?>
</ul>

无论我是在主页上还是在注册等,我都需要使我的家庭控制器中的索引功能正常工作,

我尝试在家庭控制器中添加更多视图:

$this->load->view('register', $data)

但这只是一维的。 任何帮助将不胜感激。

我已经设法弄清楚如何做到这一点,所以对于其他遇到困难的人来说,这就是我所做的。

家庭控制器

我保留了以下获取类别的函数。

public function index()
{   
    $data['mcats'] = $this->Categories_model->get_categories();
    foreach($data['mcats'] as $key => $val){
        $subcats = $this->Categories_model->get_categoriesSub($val['cid']);
        if($subcats){
            $data['scats'][$val['cid']] = $subcats;
        }
    }
    $this->load->view('home', $data);
}

我复制了 index 函数并将其添加到我的 Auth.php 控制器中,该控制器具有两个功能 - 注册和登录。我在加载注册和登录视图的步骤中添加了索引功能。

Auth.php控制器-注册功能

public function register()
    $data['mcats'] = $this->Categories_model->get_categories();
    foreach($data['mcats'] as $key => $val){
    $subcats = $this->Categories_model->get_categoriesSub($val['cid']);
        if($subcats){
            $data['scats'][$val['cid']] = $subcats;
        }
    }   
    $this->load->view('register', $data);
}

Auth.php 控制器 - 登录功能

public function login()
    $data['mcats'] = $this->Categories_model->get_categories();
    foreach($data['mcats'] as $key => $val){
    $subcats = $this->Categories_model->get_categoriesSub($val['cid']);
        if($subcats){
            $data['scats'][$val['cid']] = $subcats;
        }
    }   
    $this->load->view('login', $data);
}

现在允许该功能在加载登录或注册时工作。

能否尝试使用构造函数,并定义需要在多个函数中使用的变量。

public function __construct(){

   //load the model.
   $this->load->model('Categories_model', 'Categories_model');

   $this->data['mcats'] = $this->Categories_model->get_categories();
   foreach($this->data['mcats'] as $key => $val){

      $subcats = $this->Categories_model->get_categoriesSub($val['cid']);
      if($subcats){
         $this->data['scats'][$val['cid']] = $subcats;
      }
   }   
}

public function index()
    $this->load->view('home', $this->data);
}

public function register()
    $this->load->view('register', $this->data);
}

public function login()
    $this->load->view('login', $this->data);
}