在控制器或视图中创建导航

时间:2013-03-19 15:09:48

标签: php oop codeigniter

你好,我对某事有疑问。我正忙着用CI创建一个网站,我已经向自己征服了一个问题/问题。你把CI的导航代码放在哪里?在控制器中或在视图中总是包含?

2 个答案:

答案 0 :(得分:1)

<强>更新

这是我在这里发布的最后一个回复。

由于您已经无法在控制器中进行导航,因此您可以执行此操作。将数据作为阵列加载到控制器中。将导航中的每个链接都作为该数组的一部分。将数据传递给您的视图(理想情况下我之前讨论过的template.php视图),并通过foreach循环运行数组。

由于您不希望导航具有完全独立的视图文件,因为您不喜欢只有5行代码,因此请将其放在模板文件中。所以你的模板应该是这样的:

<head>
    <?php $this->load->view('elements/head'); ?>
</head>
<header>
    <ul>
        <?php foreach($menus as $menu): ?>
            <li><a href='<?php print $menu["url"] ?>'><?php print $menu["title"] ?></a></li>
        <?php endforeach; ?>
    </ul>
</header>
<body>
    <div class="content">
        <?php $this->load->view($content); ?>
    </div>
</body>
<footer>
    <?php $this->load->view('elements/footer'); ?>
</footer>

所有这些都说,实际上在控制器中回显这些数据是违反MVC模式的。您可以在控制器中声明您的数据,但您应该在视图中加载它。

此外,this questionthis question甚至更多this question都同意单独的导航视图是最佳选择。


我通常有一个默认的“template.php”视图,它包含在每个页面上。里面的内容是动态加载的。

在这种情况下,我建议将导航放在“header.php”视图文件中(假设您的导航位于顶部),并将其加载到“template.php”视图中。这将分隔代码块,以便您稍后更改导航。您的模板文件应如下所示:

<head>
    <?php $this->load->view('elements/head'); ?>
</head>
<header>
    <?php $this->load->view('elements/header'); ?>
</header>
<body>
    <div class="content">
        <?php $this->load->view($content); ?>
    </div>
</body>
<footer>
    <?php $this->load->view('elements/footer'); ?>
</footer>

答案 1 :(得分:1)

通常我的导航位于我的网站顶部,所以我只创建一个包含所有html,header,meta标签的header.php。然后在body标签后面我有导航所需的代码。

您可以传递一些变量或只使用uri段来查找当前页面的内容,这样您就可以突出显示导航,就像stackoverflow上的导航一样,现在突出显示问题部分。

您可以在控制器上创建模板视图,执行以下操作:

public function index(){
    $data['title'] = 'Site title'
    $data['current_page'] = 'Home'
    //the view you want to load
    $data['view'] = 'home';
    //loads the vars across all views
    $this->load->vars($data);
    //loads the view wich will have our template
    $this->load->view('template');
}

现在我们的视图模板会是这样的,记住你可以根据需要更改布局,如果你有左列或类似的东西

<?php 
$this->load->view('header');
//this is the view we loaded on our controller
$this->load->view($view);
$this->load->view('footer');
?>

例如我的视图标题包含我的导航系统,我使用变量current_page突出显示home的菜单锚点,并使用title变量在页面上显示动态标题