2011-07-13 223 views
1

我是CodeIgniter的新手,我希望我的問題有一個簡單的答案。CodeIgniter嵌套控制器?

我有一個網站,有幾個菜單項(menuA,menuB和menuC)。 我已經用控制器中的一個主控制器index(),menuA(),menuB()和menuC()對它進行了建模。被調用的函數設置一個會話值currentMenu幷包含標題,X,頁腳。 X取決於所調用的函數。標題然後高亮顯示選擇的菜單。

在menuC(我的webapp中的帳戶設置)我想有一個不同的控制器來控制AccountSettings/NotLoggedIn的子視圖。

從邏輯上講,我希望menuC()包含頁眉和頁腳,但隨後將調用轉發給管理登錄或子頁面的子控制器。

我使用框架錯誤還是有一個簡單的方法來實現呢?

+4

我認爲你應該在這裏放一些代碼,因爲答案可能因你的代碼而異。 – ramono

回答

5

我認爲這聽起來像你不理解如何將MVC應用於你的結構。用這種方式來描述:

控制器代表了用戶可以與之交互的應用程序的某些方面。例如,我可以有一個items控制器,它允許用戶創建,讀取,更新或刪除items。所有與items交互的邏輯都由該控制器處理(這意味着它調用items模型並呈現必要的視圖)。

就您而言,您聽起來像是在構建一個處理顯示用戶可能呼叫的特定頁面內容的pages控制器。所以,你的控制器可看起來像這樣:當你處理複雜的網站,有重疊

class Page extends CI_Controller { 

    public function index() 
    { 
     // Logic to render home page 
    } 

     public function about() 
    { 
     // Logic to render the about page 
    } 

    // ... etc ... 

查看可以得到一個有點棘手。我一直髮現的最有用的技巧之一是使用仿真庫來減少冗餘。這是我一直使用的那個:http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html。使用模板庫,您可以輕鬆定義包含頁眉和頁腳的佈局,然後只傳入要顯示的內容的部分內容。

當你想處理類似於菜單的邏輯時,你需要做的就是傳入一個帶有頁面名稱的變量,然後做一些基本的PHP渲染菜單。

// Say we pass in a variable called $current to our view 
// $current contains the name of the current page 
// So say $current = 'About' for this example. 


$sitemenu = array(
    array('/', 'Home'), 
    array('/about', 'About'), 
    array('/help', 'Page 2'), 
    array('/contact', 'Page 3') 
); ?> 
<nav> 
    <ul> 
    <?php foreach($sitemenu as $page) { ?> 
    <?php if($current == $page[1]) { ?> 
     <li class="current"><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li> 
    <?php } else { ?> 
     <li><a href="<?php echo $page[0]; ?>"><?php echo $page[1]; ?></a></li> 
    <?php } ?> 
    <?php } ?> 
    </ul> 
</nav> 

希望這有助於!

+0

非常感謝!偉大的anwser! – Niclas