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

时间:2011-05-03 23:40:02

标签: php codeigniter navigation

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

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

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

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

3 个答案:

答案 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);
...

然后在您的视图中,您可以处理传递给它们的变量。