我刚接触CI,我有一个问题。更像是设计方法的建议。我想为静态页面创建一个基本模板。基本上我想加载doc类型,头部和正文但没有别的。我希望通过URL调用的任何类/函数加载内容。我知道我可以用HTML模板和str_replace()做到这一点但是有更好的方法还是我不熟悉的一些奇特的CI方法?
这是我到目前为止所做的工作,但它并不是最好的。
class Sandbox extends CI_Controller {
public function __construct() {
parent::__construct();
//echo "hello world?";
}
public function load($what){
if ($what == 'something'){
if (!file_exists('application/views/content/'.$what.'.php')){
// Whoops, we don't have a page for that!
show_404();
}
$data = array();
$this->load->view('templates/header', $data);
$this->load->view('content/'.$what, $data);
$this->load->view('templates/footer', $data);
}
else { // Default load
$data = array();
$data['message'] = 'Hello World';
//$this->load->view('templates/header', $data);
$this->load->view('content/sandbox', $data);
//$this->load->view('templates/footer', $data);
}
}
}
当我加载视图方法时,它似乎工作,但我不得不添加doctype和head到模板。我宁愿单独加载它们,所以不必创建多个标题。我正在寻找的是一种专门加载页面部分以及该给定页面所需的任何脚本/ CSS的方法。
感谢您的任何建议。
答案 0 :(得分:0)
控制器中的函数名称是对url的引用,例如:
www.ci.com/sandbox/load
上面的网址会在沙盒控制器中加载function load()
。
要创建模板,您只需创建一个包含所需基础知识的视图,然后将内容传递到该视图,例如:
function home(){
$data['content'] = $this->load->view('home_content',,TRUE);
this->load->view('template', $data)
}
通过在第3个参数中使用TRUE
,您将返回数据而不是显示它。
然后在模板文件中echo $content;
您还可以使用相同的方法创建单独的头文件和其他文件以包含在模板中,例如:
function home(){
$data['content'] = $this->load->view('home_content',,TRUE);
$data['head'] = $this->load->view('head',,TRUE);
this->load->view('template', $data);
}
您还可以将数据变量传递给您要返回的视图,即:
$data['content'] = $this->load->view('home_content',,TRUE);
$data['admin_script'] = $this->load->view('admin_script',,TRUE);
$data['head'] = $this->load->view('head',$data,TRUE);
我希望这有帮助! :)
同时强>
如果要加载不同的页面,您应该为它们创建单独的函数并创建新的路由规则:Codeigniter: URI ROUTING