Codeigniter如何动态创建菜单

时间:2010-09-07 22:51:39

标签: php codeigniter

所以我有一个菜单,我想根据经过身份验证的用户的访问级别生成一个主菜单。创建菜单没问题,但我想在“标题”视图中自动创建生成的菜单。所以在我的控制器中我调用了“标题”视图,但我不想像这样传递标题的动态部分:

$data['menu'] = 'Some Generated HTML Menu';
$this->load->view('header',$data);

我希望它已经包含在我的头文件中,但我不确定如何做到这一点(除了从我的构造函数中添加$ data声明)。

2 个答案:

答案 0 :(得分:0)

你可以让$ data ['menu'] =(button_name,url)的多维数组。然后在视图中将此数组传递给一个插件,该插件根据该数组生成html菜单。

答案 1 :(得分:0)

我不知道这是否会对你有所帮助,但这是我在模板系统上运行时间最长的方法,然后才采用更高级的方法。

Top Head :views / inc / top_head.php

<html>
<head>
<!-- all of your imports you want across all pages -->

底部头部:views / inc / bottom_head.php

我是这样做的,这样我就可以拆分和添加自定义Javascript的东西,也许会带来特殊情况下的导入。

</head>
<body>
<div id="main_container">
    <div id="navigation">
         <?php
              // DO YOUR NAVIGATION MAGIC HERE
              if($is_logged_in) :
                  // BAM MAGIC DONE
              else :
                  // No magic show here
              endif;
         ?>
    </div>

页脚:views / inc / footer.php

这就是你要在页脚中添加东西的地方....

</div>
</body>

现在我们需要将内容实际填入模板

索引页:/views/some_controller/index.php

<?php $this->load->view('inc/top_head.php'); ?>

<?php $this->load->view('inc/bottom_head.php;) ?>

<h1>Hello</h1>
<p>Some filler content and stuff I guess would go here...Of course</p>

<?php $this->load->view('inc/footer.php'); ?>

所以,我们有一个快速的模板系统。现在向您展示我为控制器所做的工作

<?php

class Some_Controller extends Controller {
    public $page_data;

    public function __construct() {
        parent::__construct();       // Load parent constructor

        // This is page data that we obviously don't want to keep retyping
        $this->page_data = array(
            'is_logged_in' => FALSE, // Obviously do some test here
            'page_title'   => 'Some Title'
        );
    }

    public function index() {
        $this->_load('some_controller/index');
    }

    /** Should think of a better name but meh */
    private function _load($view) {
        $this->load->view($view, $this->page_data);
    }
}

我希望这在某种程度上有所帮助。请注意,这是一个快速写作。如果我真的想要将它投入生产,我会将_load函数移动到父类并扩展它。我也可能会随之移动page_data变量。