IN 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助手或插件可以让我保持页眉页脚和topnavigation静态,并允许我使用ajax加载特定视图。
提前感谢..
答案 0 :(得分: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>
如果我的代码出现问题,请给我留言 快乐编码---&gt; :D
答案 1 :(得分: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>
永远不应该工作。代替误导性的'controller / get_page'事物,应该有一个实际GET请求的URL。让我们再试一次,看看它如何在现实生活中发挥作用:
$("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请求将在何处结束?在默认控制器路由中,这是正确的。这就是您需要修改请求URL并设置路由的原因,以便将此请求传递给ajax服务控制器。或者只是将ajax-serve函数添加到默认控制器并将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>
你们都已经准备好了。