2010-09-07 148 views
0

所以我有一个菜单,我想根据经过验证的用户的访问级别生成主菜单。创建菜单没有问题,但是我想在我的“标题”视图中自动创建生成的菜单。所以在我的控制,我呼吁的“头”的说法,但我并不想通过头部像这样的这种动态部分:Codeigniter如何动态创建菜单

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

我宁愿它已经被列入我的头文件,但我不确定如何做到这一点(除了从我的构造函数中添加$ data声明)。

回答

0

我不知道这是否会对您有所帮助,但这是我在开始使用更高级的方法之前最长时间完成模板系统的方式。

上盖:观点/ INC/top_head.php

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

底封头:观点/ 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> 

页脚:观点/ INC/footer.php

在这里,您将投入您的页脚的东西等等....

</div> 
</body> 

现在我们在A点我们需要将内容实际填充到模板中

索引页面:/ 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变量。

0

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

+0

或者因为插件被弃用而成为帮手;) – AlienWebguy 2011-06-13 00:56:53