【问题标题】:Ajax content area with CodeIgniter?使用 CodeIgniter 的 Ajax 内容区域?
【发布时间】:2013-04-18 14:03:46
【问题描述】:

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

感谢任何想法,谢谢

【问题讨论】:

    标签: php codeigniter jquery


    【解决方案1】:

    为什么不用 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!')); 
    }
    

    我想你明白了。

    【讨论】:

    • 这会导致同样的问题。例如,我有一个名为 control1 的控制器,它调用一个名为 view1 的视图,该视图位于由 MY_Controller 加载的页眉/页脚之间。如果我访问 mywebsite.co.uk/control1,它将在 MY_Controller 中加载页眉和页脚,在 control1 中加载 view1。但是,假设有一个导航链接将 mywebsite.co.uk/control2(也扩展了 MY_Controller)动态加载到内容区域,页眉和页脚也将由 MY_Controller 加载到内容区域。这有意义吗?
    【解决方案2】:

    在 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,因此每个视图必须只有一个 &lt;div&gt; 来加载部分

    重要

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

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2016-03-14
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2012-03-08
      • 2016-03-07
      • 2020-07-12
      相关资源
      最近更新 更多