0

最近开始使用 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,它只有在加载到内容区域时才有效它需要有页眉、导航和页脚。

我理想需要的解决方案是始终在任何控制器周围加载页眉/导航/页脚,这样如果我通过 URL 转到控制器/方法,我就不必在控制器中加载页眉/导航/页脚但是它会自动加载在它周围。

任何想法表示赞赏,谢谢

4

2 回答 2

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!')); 
}

我认为你说对了。

于 2013-04-18T14:18:52.973 回答
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>

这是一个糟糕的示例,您可以同时定义 aphp method which serves the views和 a js method which loads them into divs,因此每个视图必须只有一个<div>加载部分的位置

重要的

如果你可以使用 Ajax,这个解决方案很棒,因为一旦你将 #footer div 移动到视图中的其他位置,你就会移动整个页脚视图,例如,php 无论如何都会更加静态,但这取决于,我很难过,如果你可以或不使用 ajax ;)

于 2013-04-18T14:24:20.203 回答