【问题标题】:Efficient Website Navigation with CodeIgniter使用 CodeIgniter 进行高效的网站导航
【发布时间】:2011-05-03 23:40:02
【问题描述】:

我正在开发一个网站,在该网站的导航中最多可以有 3 个层次结构。

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

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

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

【问题讨论】:

    标签: php codeigniter navigation


    【解决方案1】:

    我将假设您的主要导航部分几乎直接映射到您的控制器,即。

    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));
    

    希望这会有所帮助。

    【讨论】:

      【解决方案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 部分匹配 url 的链接)。

      【讨论】:

        【解决方案3】:

        最好的方法是使用 3 个不同的视图,一个顶视图、一个左视图和一个底视图,然后在您的控制器中,您可以将适当的变量传递给每个视图,这样您就可以执行类似的操作

        $top[current] = something;
        $top[current_sub] = somethingelse;
        $this->load->view('top_nav', $top);
        $this->load->view('left_nav',$left);
        ...
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多