0

在 codeigniter 中,我反复使用控制器来加载页面的所有模板......我将页面分为页眉、顶部导航、左侧导航以及内容和页脚。

这是我目前所做的

public function get_started() {
    if (test_login()) {
        $this->load->view('includes/header');
        $this->load->view('includes/topnav');
        $this->load->view('includes/leftbar');
        $this->load->view('login_nav/get_started');
        $this->load->view('includes/footer');
    } else {
        $this->load->view('errors/needlogin');      
    }
}

codeigniter 中是否有任何 jquery-ajax 助手或插件可以让我保持页眉页脚和顶部导航静态,并允许我使用 ajax 加载特定视图。

提前致谢..

4

2 回答 2

0

您可以使用构造函数来设置静态标头:

//in your controller

public $data;

function __construct()
{
    $this->data['header'] = 'static_header';
    $this->data['static_footer'] = 'static_footer';
}

function get_started(){
    if (test_login()) {
        $this->data['subview'] = 'login_nav/get_started';
    } else {
        $this->data['subview'] = 'errors/needlogin';
    }
        $this->load->view('template',$this->data);
}

function get_page(){
   $view = $this->load->view('your_dynamic_view','',TRUE);
   print json_encode(array('success' => TRUE, 'view' => $view);
}

// in your template.php
<div id="header"><?php echo $this->load->view('header');?></div>
<div id="subview"><?php echo $this->load->view('subview');?></div>
<div id="footer"><?php echo $this->load->view('footer');?></div>

// in your script - used to load dynamic view on you subview div
<script type="text/javascript">
    $.get('controller/get_page',{},function(data){
        if(data.success){
            $('#subview').html(data.view);
        }
    },'json')
</script>

如果我的代码有问题,请给我发消息快乐编码--->:D

于 2013-03-04T07:09:36.527 回答
0

PinoyPal的回答在理论上是正确的,但在实践中它对我不起作用,因为它缺少一个主要细节:一条路线。

看看他们脚本的这一部分:

// in your script - used to load dynamic view on you subview div
<script type="text/javascript">
    $.get('controller/get_page',{},function(data){
        if(data.success){
            $('#subview').html(data.view);
        }
    },'json')
</script>

这里应该有一个实际 GET 请求的 url代替“controller/get_page” 。这是它通常应该看起来的样子:

$("a.your_navigation_element_class").on('click',function(e){
    e.preventDefault(); //this is to prevent browser from actually following the link
    var url = $(this).attr("href");
    $.get(url, {}, function(data){
        if (data.success){
            $('#subview').html(data.view);
        }
    },'json')
});

现在有一个问题:这个 GET 请求会在哪里结束?在默认的控制器路由中,没错。这就是为什么你需要 1) 修改你的请求 url 和 2) 设置一个路由,以便这个请求将被传递给一个 ajax 服务控制器。或者只是将一个 ajax 服务功能添加到您的默认控制器并将 ajax 请求重新路由到它。

以下是它应该如何包装

在 ...\application\controller\Pages.php 中:

class Pages extends CI_Controller {
    ...
    public function serve_ajax ($page) {
        $view = $this->load->view($page, '', TRUE);
        print json_encode( array('success' => TRUE, 'view' => $view);
    }
    ...
}

在 ...\application\config\routes.php 中:

...
$route['ajax/(:any)'] = 'pages/serve_ajax/$1';

在您的页面上:

...
<body>
    ...
    <div id="page"></div>
    ...
    <script>
        $("a.navigation").on('click',function(e){
            e.preventDefault();
            var url = $(this).attr("href");
            $.get("/ajax" + url, {}, function(data){
            //The trailing slash before "ajax" places it directly above
            //the site root, like this: http://yourdomain.com/ajax/url
                if (data.success){
                    $('#page').html(data.view);
                }
            },'json')
        });
    </script>
</body>

你都准备好了。

于 2018-06-19T03:16:54.403 回答