使用codeigniter在头文件上加载菜单

时间:2014-08-28 12:01:19

标签: php codeigniter

我是Codeigniter的新手,我一直在努力开发一些使用它的部分。 在我的头文件中,我需要加载我的菜单项,我已经创建了一个菜单控制器,菜单模型和一个视图。 控制器页面

<?php
  class Menu extends CI_Controller
  {
 public function __construct(){
     parent::__construct();
     $this->load->model('menu_model');

 }
 public function index(){

    $data['menuArray'] = $this->mainMenuDataLoad();

    if($data['menuArray']){
        $this->load->view('menu' , $data);
    }
 }

 public function mainMenuDataLoad(){ /* create menus Array */

    $rootMenuData = $this->menu_model->loadManuData();

    if($rootMenuData){
        for($e=0; $e<count($rootMenuData); $e++){
            if($rootMenuData[$e]){
                $data[$e] = array(
                        'title' => $rootMenuData[$e]['title'],
                        'menu_id' => $rootMenuData[$e]['menu_id'],
                        'url' => $rootMenuData[$e]['url'],
                        'menu_icon' => $rootMenuData[$e]['menu_icon'],
                );

                $get_sub = $this->mainMenuDataLoad($rootMenuData[$e]['menu_id']);
                if($get_sub){
                    $data[$e]['sub'] = $get_sub;
                }
            }
        }
        return $data;
    }
    return false;
 }   }

这是我的模特页面

class Menu_model extends CI_Model{

public function loadManuData(){
    $this->db->select("*");
    $this->db->from('tbl_menu');
    $this->db->order_by("order", "DESC");
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        $r=0;
        foreach ($query->result() as $row) {
            $data[$r]['root_id'] = $row->root_id;
            $data[$r]['menu_id'] = $row->menu_id;
            $data[$r]['title'] = $row->title;
            $data[$r]['url'] = $row->url;
            $data[$r]['menu_icon'] = $row->menu_icon;
            $r++;
        }
        return $data;
    }
    return false;
}

public function __construct(){
    parent::__construct();
}}

在我的菜单视图页面上,我正在循环菜单数据。 但是在我的header.php上,如果我尝试像这样调用菜单控制器

$this->load->controller('menu');

它给我一个这样的错误。

  

致命错误:在header.php上调用未定义的方法CI_Loader :: controller()

我做错了什么? 有人请指导我。 提前谢谢

menu.php查看页面

 <ul class="nav navbar-nav">
    <?php 
    print_r($menuArray);
            for($q=1; $q<count($menuArray); $q++){ 

        ?><li>
                        <a href="<?php echo base_url($menuArray[$q]['url']);?>">
                            <span class="<?php echo $menuArray[$q]['menu_icon'];?>">
                            <?php echo $menuArray[$q]['title'];?>
                            </span>
                        </a>
                    </li>
        <?php   }

    ?>

  </ul>

2 个答案:

答案 0 :(得分:2)

你无法从视图中调用控制器

即。在视图页面中编写此代码$this->load->controller('menu');是不允许的。

控制器加载视图和模型,它是这里的素数控制器

[更多编辑:]

将您的模型更改为此

class Menu_model extends CI_Model{
public function __construct(){
    parent::__construct();
}

public function get_menu()
{
    $this->db->select("*");
    $this->db->from('tbl_menu');
    $this->db->order_by("order", "DESC");
    $query = $this->db->get();

    return $query;

}

}?>

然后在控制器中执行此操作

public function index(){

            $data['menuArray'] = $this->menu_model->mainMenuDataLoad()->result_array();
            $this->load->view('header', $data);
            $this->load->view('menu'); // u are passing data from here//
            $this->load->view('landing_page');
            $this->load->view('footer');
         }

最后是视图

<?php
    if(count($menuArray)>0)
    {
    for($q=0; $q<count($menuArray); $q++){ 

        ?><li>
                        <a href="<?php echo base_url($menuArray[$q]['url']);?>">
                            <span class="<?php echo $menuArray[$q]['menu_icon'];?>">
                            <?php echo $menuArray[$q]['title'];?>
                            </span>
                        </a>
                    </li>
        <?php   }
    }?>

您也不需要控制器

中的公共函数mainMenuDataLoad()函数

答案 1 :(得分:0)

如果您使用函数创建一个BaseController并从扩展控制器调用它,那么这是更好的解决方案。

BaseController:

class BaseController extends CI_Controller 
{
protected $data = array();

function __construct() {
    parent::__construct();

     $this->load->model('my_model');
}

protected function LoadContView($aContentView) {
    $this->data['menu'] = $this->my_model->getMenu();

    $this->load->view('common/ViHeader', $this->data);
    $this->load->view($aContentView, $this->data);
    $this->load->view('common/ViSidebar', $this->data);
    $this->load->view('common/ViFooter', $this->data);
}

MYPAGE:

class Mypage extends BaseController{

    function __construct() {
        parent::__construct();
    }

    public function index() {
        $this->LoadContView('my_view');
    }

}

也使用foreach($ menu_array作为$ menu_item):)