2010-09-07 140 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