你好我有一个问题。我正忙着用 CI 创建一个网站,我已经为自己解决了一个问题。您将导航代码放在 CI 中的什么位置?在您始终包含的控制器或 1 个视图中?
2 回答
更新
这是我在这里发布的最后一个回复。
由于您对在控制器中使用导航一无所知,这就是您可以做的。将数据作为数组加载到控制器中。让导航中的每个链接成为该数组的一部分。将数据传递到您的视图(最好是我之前谈到的 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 模式的。你可以在控制器中声明你的数据,但你应该在视图中加载它。
此外,这个问题,这个问题,甚至更多这个问题都同意单独的导航视图是最好的。
我通常有一个默认的“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>
通常我的导航在我的网站顶部,所以我只创建一个带有所有 html、header、meta 标记的 header.php。然后在正文标签之后,我有导航所需的代码。
您可以传递一些变量或仅使用 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 突出显示主页的菜单锚点,并使用 title 变量在页面之间具有动态标题