我正在一个网站上工作,导航中最多可以有3个级别的层次结构。
过去,当我用PHP编写自己的文件时,我会创建一个文件navigation.php,其中包含所有部分和子部分的类和数组以及一些输出导航的函数。我在网站的每个页面上设置变量(current_section ='',current_sub_section =''),因此导航功能会知道要突出显示的内容。
在CodeIgniter中,我想知道这仍然是一个很好的使用方法吗?
答案 0 :(得分:6)
我将假设您的主导航部分几乎直接映射到您的控制器,即
Home | News | Events
在您的顶部栏中,映射到:
如果是这种情况,您已经有了一种选择导航阵列的简单方法。
您可以在控制器构造函数和放大器中放置一组导航项链接对。将它们传递给输出中的子视图。
示例:
class HomeController extends CI_Controller
{
private $nav;
public function __construct()
{
parent::__construct();
$this->nav = array(
array('Browse', site_url('news/browse')),
array('Edit', site_url('news/edit'))
);
$this->load->vars(array('NavigationArray' => $this->nav));
}
// ...
}
现在你所做的就是在所有视图$NavigationArray
中自动注册一个包含显示名称 - 链接对数组的变量。
然后,您可以加载一个基本的导航视图,从该变量构建您的子视图(因为它可以在任何地方使用)。
<? foreach($NavigationArray as $entry): ?>
<a href="<?=$entry[1];?>"><?=$entry[0];?></a>
<? endforeach; ?>
在下面你可以找到你可以选择在控制器中设置的子导航阵列的存在,或者其他什么(你谈到的第三个可选导航)
<? if(exists($SubNavigationArray)): ?>
<? foreach($SubNavigationArray as $entry): ?>
<a href="<?=$entry[1];?>"><?=$entry[0];?></a>
<? endforeach; ?>
<? endif; ?>
请记住,这个例子非常基本,但这通常是我们传递数据的方式,我不希望你把全局变量放在任何地方并尝试排队。只需将变量“加载”到视图引擎中,就可以在渲染视图/子视图时使用它们。
这样控制器控制会显示哪些导航项。
另请注意:
您可以显式传递变量,而不是相信它们将存在于您的视图范围内。
$this->load->view('myview', array('NavigationArray' => $this->nav));
希望这有帮助。
答案 1 :(得分:2)
这基本上是我在Codeigniter中确定“活动”链接的方法:
$active_class = '';
$url = site_url('your/link/url');
if ($url == current_url())
{
$active_class = ' class="active"';
}
$link = '<a href="'.$url.'"'.$active_class.'>Link Text</a>";
请记住,这是一个基本示例,通常在循环中运行。最好的方法取决于导航阵列的外观,以及您认为“活动”的内容(如果您想“激活”其href与网址部分匹配的链接)。
答案 2 :(得分:0)
最好的方法是使用3个不同的视图,一个顶视图,一个左视图和一个底视图,然后在您的控制器中,您可以将apporiate vars传递给每个视图,这样您就可以执行类似
的操作$top[current] = something;
$top[current_sub] = somethingelse;
$this->load->view('top_nav', $top);
$this->load->view('left_nav',$left);
...
然后在您的视图中,您可以处理传递给它们的变量。