带有codeigniter的动态菜单

时间:2013-11-24 17:56:18

标签: php codeigniter

我正在构建导航菜单,它包含将从数据库中拉出的类别,例如

Home      + Product   
          - Ham
          - Sausage
          - etc 
          - etc 


--------Database Schema------
+----+-------------------------+------+
| id | name                    | show |
+----+-------------------------+------+
|  1 | ham                     |    1 |
|  2 | sausages                |    1 |
+----+-------------------------+------+

这是我的分类控制器

class Categories extends CI_Controller {

        public function __construct() {
            parent::__construct();

            $this->load->model('category');
        }

        public function index()
        {   
            // 1. pulling data from db assigned to $data
            $data['categories'] = $this->category->get_categories();

            // 2. passing $data to header view to build dynamic navigation menu
            $this->load->view('header',$data);

            // 3. passing $data to the view category to render some other content
            $this->load->view('category',$data);

            // 4. passing $data to footer view to build dynamic footer menu
            $this->load->view('footer',$data);
         }


         public function get($id)
         {
            $this->load->view('header');


     } 
}

------------ views / header.php页面(代码如下所示)

<ul>
   <?php foreach($categories as $item): ?>
   <li><a href="categories/get/<?php echo $item->id;?>"><?php echo $item->name;?></a></li>
   <?php endforeach; ?>
</ul>

-----------问题是 当我从菜单中选择一个类别例如火腿时,我看到网址就像这样

127.0.0.1/cms/categories/get/1 在类别页面

当我点击例如火腿时,我将转移到此网址

127.0.0.1/cms/categories/get/1

但当我将鼠标悬停在菜单上时,我会看到

127.0.0.1/cms/categories/get/categories/get/1 这是导航菜单的问题

你看到伙计们,{categories}的控制器以及{get}的动作 每个控制器和动作重复两次,

我的问题 1-我在这里做错了什么 -

2-如何正确地通过整个应用程序共享此动态菜单,我应该把这段代码放在哪里。另请注意,此菜单将从数据库中创建

非常感谢高级

2 个答案:

答案 0 :(得分:0)

您只需要修复视图

<ul>
   <?php foreach($categories as $item): ?>
   <li><a href="<?php echo base_url();?>categories/get/<?php echo $item->id;?>"><?php echo $item->name;?></a></li>
   <?php endforeach; ?>
</ul>

正确加载它...我建议你在视图文件夹中创建一个文件调用模板,我们称之为template.php

public function index()
    {   
        // 1. pulling data from db assigned to $data
        $data['categories'] = $this->category->get_categories();

        $data['page_name'] = 'WHATEVER_PAGE_NAME_YOU_HAVE';

        // send it to the template instead....
        $this->load->view('template',$data);
     }

模板文件

<html>
   <head></head>
   <body>
      $this->load->view('header');

      $this->load->view($data['page_name']);

      $this->load->view('footer');
   </body>
</html>

HEADER.PHP文件将是这样的....

     <div>HEADER CONTENT </div>

WHATEVER_PAGE_NAME_YOU_HAVE.PHP文件将是这样的....

    <h1>TESTING</h1>

FOOTER.PHP文件就像这样......

     <div>Footer CONTENT </div>

为了使其更易于管理,请创建库并在每个类的costructor中调用它,或者您可以自动加载它。加载后,您可以调用该函数并获取数据..如果您需要一个示例,请告诉我们?或者你可以阅读http://ellislab.com/codeigniter%20/user-guide/general/creating_libraries.html 希望能帮助......

答案 1 :(得分:0)

我为这个动态菜单创建了一个小型库。如果有人仍在寻找这个答案,希望对他们有所帮助。

你可以从Github获取所有代码。

https://github.com/hassann201/Egenius_Dynamic_Menu 

由于