2011-07-13 316 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