2

我是codeigniter的新手。我正在尝试使用 mysql 数据库编写应用程序。在我的网站中,我想将菜单用作:

+Homepage
+About
+Services
  +Education services
  +neurofeedback
  +biofeedback

我需要一些信息才能理解。我使用页面控制器作为主页控制器:

<?php 

class Pages extends CI_Controller {

        public function view($page = 'home')
        {$this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);

我的问题是:

1)菜单控制器必须在页面控制器内编码还是单独编码?

2)如何从数据库制作菜单控制器?

3) 我如何与菜单 ID 和页面 ID 建立关系?

我做了很多研究,但我需要更多的了解。

感谢您的帮助。

编辑:正如你所说,我使用了 MY_Controller。

这是我的页面控制器:

class Home extends MY_Controller {
         function __construct() {
    parent::__construct();
  }

        public function view($page = 'home')
        {
         $this->load->helper('text');
            $data['records']= $this->services_model->getAll();
            if ( ! file_exists('application/views/pages/'.$page.'.php'))
            {
                // Whoops, we don't have a page for that!
                show_404();
            }

            $data['title'] = ucfirst($page); // Capitalize the first letter


            $this->load->view('pages/'.$page, $data);


        }

}
4

1 回答 1

5

菜单控制器必须在页面控制器内编码还是单独编码?

假设你有一个所有页面都必须遵循的模板,我建议你这样做。

1.创建基本控制器

在 ./application/core/ 文件夹中,创建一个名为 MY_Controller 的文件

class MY_Controller extends CI_Controller {

  protected $data = array();

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

  function render_page($view) {
    //do this to don't repeat in all controllers...
    $this->load->view('templates/header', $this->data);
    //menu_data must contain the structure of the menu...
    //you can populate it from database or helper
    $this->load->view('templates/menu', $menu_data);
    $this->load->view($view, $this->data);
    $this->load->view('templates/footer', $this->data);
  }

}

2.每个页面创建一个控制器,使用MY_Controller代替CI_Controller

class Homepage extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

  function index() {
    //define data that the view can access
    $this->data['someDataToView'] = 'Some data';
    $this->render_page('pages/homepage');
  }

}

如何从数据库制作菜单控制器?

好吧,你不会有菜单的控制器,而是一个视图。

菜单的可能性

  1. 为菜单创建一个视图,在 MY_Controller 中从数据库中加载记录,在 中加载视图render_page()
  2. 为菜单创建一个视图,在 MY_Controller 中创建一个定义菜单结构和使用的Helperrender_page()函数,在 中加载视图;

菜单模板示例(根据您的情况进行调整):

./application/views/templates/menu.php

<ul>
<?php foreach($menus as $menu): ?>
  <li><a href='<?php print $menu["url"] ?>'><?php print $menu["title"] ?></a></li>
<?php endforeach; ?>
</ul>

编辑

鉴于您的 Home 控制器,我认为错误在您的 file_exists 检查中。查看我更改的 Home 控制器:

class Home extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

   public function view($page = 'home') {
     $this->load->helper('text');
     //always use $this->data
     $this->data['records']= $this->services_model->getAll();
     if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
     {
       //check the content of APPPATH.'views/pages/'.$page.'.php'
       // Whoops, we don't have a page for that!
       show_404();
     }

     $this->data['title'] = ucfirst($page); // Capitalize the first letter

     //if you use the MY_Controller, check the render_page function...
     //$this->load->view('pages/'.$page, $data);
     $this->render_page('pages/'.$page)
   }
}
于 2012-08-01T03:15:06.727 回答