2012-08-01 115 views
2

我是一个codeigniter的新手。我正在尝试使用mysql数据库编写应用程序。 在我的地盘我想作为使用的菜单:Codeigniter动态导航

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


     } 

} 

回答

6

在菜单控制器必须内页控制器或单独一个编码?

假设你有一个必须由所有页面跟随的模板,我建议你这样做。

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中使用的Helper函数,加载视图render_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> 

编辑

鉴于你家庭控制器,我认为错误是在你的file_exists检查。看到我改变本地控制器:

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) 
    } 
} 
+0

塞尔吉奥,我是正确的,我必须建立在“应用程序/核心/”控制器?之后,我必须在“应用程序/控制器”中构建一个页面控制器? – ytsejam 2012-08-01 03:39:18

+0

/application/core中的控制器意味着您将扩展CI_Controller,添加更多功能。请注意,您没有MY_Controller的url,但/ application/controller中的其他控制器将扩展MY_Controller。你可以看到更多的信息[这里](http://codeigniter.com/user_guide/general/core_classes.html) – 2012-08-01 12:51:46

+0

我现在得到404错误。你可以检查我的控制器吗?我把它们放在编辑后的问题中。 – ytsejam 2012-08-01 13:48:53