CodeIgniter的Ajax内容区域?

时间:2013-04-18 14:03:46

标签: php codeigniter jquery

最近开始使用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转到控制器/方法,我不必加载标题/导航/页脚控制器,但它会自动加载到它周围。

感谢任何想法,谢谢

2 个答案:

答案 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 viewsjs method which loads them into divs,因此每个视图必须只有<div>加载部分

重要

如果你可以使用Ajax,这个解决方案很棒,因为一旦你在你的视图中的其他地方移动#footer div你移动一个enteire页脚视图,例如,php会更加静态,但它取决于,我很难过,如果你能否使用ajax;)