我是codeigniter的新手.我正在尝试使用mysql数据库编写应用程序.在我的网站中,我想使用菜单:
+Homepage
+About
+Services
+Education services
+neurofeedback
+biofeedback
Run Code Online (Sandbox Code Playgroud)
我需要一些信息来理解.我使用页面控制器作为主页面控制器:
<?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);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
菜单控制器必须在页面控制器内编码还是分开?
假设您有一个必须跟随所有页面的模板,我建议您这样做.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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');
}
}
Run Code Online (Sandbox Code Playgroud)
如何从数据库中创建菜单控制器?
好吧,你不会有菜单的控制器,而是一个视图.
菜单的可能性
render_page();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>
Run Code Online (Sandbox Code Playgroud)
编辑
鉴于您的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)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17453 次 |
| 最近记录: |