最近开始使用CodeIgniter重新开发应用程序,我正在尝试将我的模板实现到系统中。
我正面临一个我无法看到的问题
基本上,在控制器内的一分钟,我正在做的一个例子是:
/*
* Load view for header
*/
$this->load->view('header_view');
/*
* Load view for navigation
*/
$this->load->view('navigation_view');
/*
* Load view for content
*/
$this->load->view('content_view');
/*
* Load view for footer
*/
$this->load->view('footer_view');
然而,我面临的问题是内容区域有动态加载的页面。
因此导航区域链接不会打开HREF URL,但会通过ajax将该页面数据加载到内容div中。
我需要能够直接通过“http://www.website.co.uk/controller/method_name/parameters”这样的网址直接转到我的控制器,这一点很好。
然而,导航会将该链接加载到内容区域,该内容区域还包括标题/导航/页脚,因此我最终在内容区域中嵌套了布局......
围绕它的简单方法是“不要在每个页面中包含标题/导航/页脚视图”然而你不能直接转到上面的URL,它只能在加载到内容区域,因为它需要有标题,导航和页脚。
我理想需要的解决方案是标题/导航/页脚总是在任何控制器周围加载,这样如果我通过URL转到控制器/方法,我不必加载标题/导航/页脚控制器,但它会自动加载到它周围。
感谢任何想法,谢谢
答案 0 :(得分:0)
为什么不用MY_Controller扩展CI控制器,那么所有控制器都将扩展MY_Controller。在my_Controller中有一个类似的函数:
public function loadView($file, $data=array()){
$this->load->view('header', $data);
$this->load->view($file, $data);
$this->load->view('footer', $data);
}
然后,从您的控制器操作中,只需调用它:
public function index(){
// code code code
$this->loadView('welcome', array('message'=>'Hello!'));
}
我认为你明白了。
答案 1 :(得分:0)
在ajax中你可以使用这样的视图:
<div id="header"></div>
<div> //here all your stuffs</div>
</div id="footer"></div>
然后只是:
<script>
$(function(){
$('#footer').load('my_footer_view_url');
$('#header').load('my_header_view_url');
});
</script>
这是一个糟糕的例子,您可以同时定义php method which serves the views
和js method which loads them into divs
,因此每个视图必须只有<div>
加载部分
重要强>
如果你可以使用Ajax,这个解决方案很棒,因为一旦你在你的视图中的其他地方移动#footer div你移动一个enteire页脚视图,例如,php会更加静态,但它取决于,我很难过,如果你能否使用ajax;)