你好,我对某事有疑问。我正忙着用CI创建一个网站,我已经向自己征服了一个问题/问题。你把CI的导航代码放在哪里?在控制器中或在视图中总是包含?
答案 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 question,this 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变量在页面上显示动态标题