使用CodeIgniter进行高效的网站导航

joh*_*son 2 php navigation codeigniter

我正在一个网站上工作,导航中最多可以有3级层次结构.

  • 顶部标题中的主要部分
  • 左侧的子导航
  • 下面的可选子子导航

在过去,当我用PHP编写自己的文件时,我会创建一个文件navigation.php,其中包含所有部分和子部分的类和数组以及一些输出导航的函数.我在网站的每个页面上设置变量(current_section ='',current_sub_section =''),因此导航功能会知道要突出显示的内容.

在CodeIgniter中,我想知道这仍然是一个很好的使用方法吗?

Are*_*ren 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));
  }

  // ...

}
Run Code Online (Sandbox Code Playgroud)

现在你所做的就是在你的所有视图$NavigationArray中自动注册一个包含Display Name - Link对数组的变量.

然后,您可以加载一个基本的导航视图,从该变量构建您的子视图(因为它可以在任何地方使用).

<? foreach($NavigationArray as $entry): ?>
   <a href="<?=$entry[1];?>"><?=$entry[0];?></a>
<? endforeach; ?>
Run Code Online (Sandbox Code Playgroud)

在下面你可以找到你可以选择在控制器中设置的子导航阵列的存在,或者其他什么(你谈到的第三个可选导航)

<? if(exists($SubNavigationArray)): ?>
  <? foreach($SubNavigationArray as $entry): ?>
     <a href="<?=$entry[1];?>"><?=$entry[0];?></a>
  <? endforeach; ?>
<? endif; ?>
Run Code Online (Sandbox Code Playgroud)

请记住,这个例子非常基本,但这通常是我们传递数据的方式,我不希望你把全局变量放在任何地方并尝试排队.只需将变量"加载"到视图引擎中,就可以在渲染视图/子视图时使用它们.

这样控制器控制导航项目的显示.

另请注意:

您可以显式传递变量,而不是相信它们将存在于视图的范围内.

$this->load->view('myview', array('NavigationArray' => $this->nav));
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.