我已经创建了一个名为index的控制器,我想开发动态控制器,因为它是一次又一次创建页面名称的一个很大的障碍,所以我决定创建但我对它有一些困惑虽然我将如何开发页面我在管理面板中放置了一个选项,就像用户可以创建页面一样,但最大的问题是我无法检索这些页面。
控制器
public function index($page = 7) {
//$page = 7 where 7 is the default page set for home
$page_data = $this->get_data->AllData('pages', $page);
$data['title'] = $page_data->row()->pagetitle;
$class = explode("/", $page_data->row()->template);
$data['body_class'] = $class[1];
$this->load->view('includes/header.php', $data);
if($class[1] == 'home') {
$this->load->view('templates/slider');
}
$this->load->view('templates/navigation.php');
$page_content = $page_data->row()->template;
$this->load->view($page_content, $data);
$this->load->view('includes/footer.php');
}
public function page($pagename) {
$page_data = $this->get_data->AllData('pages', $pagename);
$data['title'] = $page_data->row()->pagetitle;
$class = explode("/", $page_data->row()->template);
$data['body_class'] = $class[1];
$this->load->view('includes/header.php', $data);
if($class[1] == 'home') {
$this->load->view('templates/slider');
}
$this->load->view('templates/navigation.php');
if($class[1] == 'home') {
$data['slider'] = 'templates/slider';
}
$data['content'] = $page_data->row()->template;
$this->load->view('index', $data);
$this->load->view('templates/footer-form.php');
$this->load->view('includes/footer.php');
}
模型
public function AllData($table, $pageid) {
$query_data = $this->db->get_where($table, array('pageid' => $pageid));
return $query_data;
}
我的导航页面
<?php
$sql_nav = $this->db->get("menu_navigation");
foreach($sql_nav->result() as $nav) {
echo "<li><a href='".base_url()."home/page/".$nav->menu_name."'>".$nav->$menu_name."</a></li>";
//output will be http://localhost:90/kwikrepair/home/page/(menu name which is the page name exist in the database)
}
?>
现在我正在尝试向来自页面的请求数据页面发送调用,以便在用户单击导航时调用页面数据,并且我想要作为参数传入页面ID索引控制器如何传递它?
答案 0 :(得分:1)
这不是使用Codeigniter开发动态页面的正确方法。 Codeigniter是一个MVC框架。如果按照模型 - 视图 - 控制器的正确分离,使用codeigniter开发动态网页非常容易。
Codeigniter用户指南非常容易理解并且有很好的例子。请尝试做一些给定的教程。
在codeigniter中,视图按照它们在控制器中出现的顺序加载。 像:
$this->load->view('header');
$this->load->view('body');
$this->load->view('footer');
因此,如果您想要选择加载页面段,请在控制器中执行:
if($class[1] == 'home') {
$this->load->view('templates/slider');
}
您不会在变量中传递视图。它用于传递从数据库模型获得的数据。 要将任何数据传递给视图,请执行以下操作:
$data['title'] = "some title" //any data or variable
然后,您可以将数据传递到其关联的视图,如:
$this->load->view('my_view',$data);
您将能够在my_view中将标题视为$ title变量。
同样,您可以在views / templates文件夹中保存导航模板 并将其加载为:
$this->load->view('templates/navigation');
你不这样做:
<?php include('templates/navigation.php'); ?>
与普通的php页面一样。 Codeigniter是一个MVC Web框架。遵循codeigniter优秀的用户指南文档中描述的适当的MVC指南。
Codeigniter URL的默认格式如下:
<installation-folder>/index.php/<controller>/<function>
如果我有一个名为Welcome.php的控制器,如:
class Welcome extends CI_Controller {
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see https://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->view('welcome_message');
}
public function display($Page = 7){
echo $Page;
}
}
我可以转到页面:
http://127.0.0.1/CI/index.php/welcome/display
并且我将显示7,因为如果我们不传递任何内容,它是分配给$ Page变量的默认值。
如果我们去:
http://127.0.0.1/CI/index.php/welcome/display/2
$ Page变量将被赋值为2,它将显示2。
以下是Codeigniter安装随附的默认控制器的注释:
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see https://codeigniter.com/user_guide/general/urls.html
*/