我将假设您的主要导航部分几乎直接映射到您的控制器,即。
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));
希望这会有所帮助。