Php CodeIgniter初始页面加载变量?
我正在寻找一种只在初始页面视图上加载页眉/页脚/导航的解决方案 这背后的原因是,我的导航面板使用Ajax在主content div中呈现目标链接的内容,而不是实际加载页面本身 然而,我需要能够说一些事情,如果它是初始视图,加载页眉,导航,然后是实际页面,然后是页脚。但是,如果它不是初始视图,并且页面加载在contentdiv区域,例如导航链接或表单提交,那么它不会加载页眉、导航和页脚,而只加载实际页面 例如,我有以下4种观点: 标题视图 导航视图 页面视图 页脚视图 该控制器: 控制器a 导航有一个链接,该链接为“页面a”,指向。如果单击该链接,我只希望controller_a加载页面视图,因为导航链接将该页面的数据加载到div中 但是,如果我直接转到,它还需要呈现页眉/导航/页脚 我认为我的解决方案是正确的,它类似于带有函数load_page()的基本控制器,类似于:Php CodeIgniter初始页面加载变量?,php,ajax,codeigniter,Php,Ajax,Codeigniter,我正在寻找一种只在初始页面视图上加载页眉/页脚/导航的解决方案 这背后的原因是,我的导航面板使用Ajax在主content div中呈现目标链接的内容,而不是实际加载页面本身 然而,我需要能够说一些事情,如果它是初始视图,加载页眉,导航,然后是实际页面,然后是页脚。但是,如果它不是初始视图,并且页面加载在contentdiv区域,例如导航链接或表单提交,那么它不会加载页眉、导航和页脚,而只加载实际页面 例如,我有以下4种观点: 标题视图 导航视图 页面视图 页脚视图 该控制器: 控制器a 导航有
function load_page($page, $data) {
if($this->uri->segment($this->uri->total_segments()) == "initial_page_load") {
$this->load->view('header_view');
$this->load->view('navigation_view');
$this->load->view($page, $data);
$this->load->view('footer_view');
} else {
$this->load->view($page, $data);
}
}
因此,如果我去它会加载页眉/导航/页脚,但如果我去它不会
然而,这并不包括所有的可能性
我想到的另一种方法是检查是否有引用URL,如果有,不要加载页眉/导航/页脚。但同样,这不包括诸如链接被外部网站引用会怎样
有人对我如何实现所需有什么建议吗?让这成为所有视图的查看页面。对于其他页面,您将通过ajax动态更改div“page_content”上的内容
**application/views/your_template_view.php**
<?php
$this->load->view('header_view');
$this->load->view('navigation_view');
?>
<a href="javascript:void(0)" id='home' class='my_links'>Home</a>
<a href="javascript:void(0)" id='about_us' class='my_links'>About us</a>
<!--
Make sure the id of the page is same as
the file name of view page for respective pages
-->
<div id='page_content'><?php echo $page_content; ?></div>
<?php
$this->load->view('footer_view');
?>
<script lang='javascript'>
$('.my_links').click(function(){
$.post(
'<?php echo site_url('test_controller/get_page_content') ?>',
{'page_content':$(this).attr('id')},
function(response){
if(response != '')
$('#page_content').text(response);
},'json'
);
});
</script>
创建一个会话变量来表示是否加载了页眉/页脚,如果加载了,只需跳过它们
if (!$this->session->userdata('nav_loaded')) {
$this->load->view('header_view');
}
等等
这将适用于您的所有页面,无论它们从何处调用,只要所有后期初始调用都由AJAX完成
编辑
如果您想在此之后混合使用ajax和非ajax调用,那么会话变量当然不会起作用。也许您可以在URL中添加一个ajax参数,并根据该参数调整控制器
public function index($ajax = false) {
...
if (!ajax) {
$this->load->view('header_view');
}
etc...
}
因此,所有AJAX调用都会将url中的附加参数设置为true(几乎所有参数都是零:
index/1
,index/AJAX
,等等)。尽管我仍在测试它,但它似乎正是我到目前为止所期望的!这是其中一个很简单,但完成了全部工作,所以希望不会出现问题
在MY_Controller.php中
function load_page($page, $data) {
if(!$this->input->is_ajax_request()) {
$this->load->view('header_view');
$this->load->view('navigation_view');
}
$this->load->view($page, $data);
if(!$this->input->is_ajax_request()) {
$this->load->view('footer_view');
}
}
在查看输入类文档时,我无意中发现了该功能我明白你的意思,但是我不能仅仅拥有一个初始页面,原因是发送了一封电子邮件,其中包含一些链接,例如您建议删除会话的位置?就像我最初加载了一个页面,它创建了会话,因此,我通过导航链接访问的内容页不会加载导航链接-如果我直接转到内容页,会话将存在,我将留下一个没有页眉/导航/页脚的页面-永远不要删除它-缺点是您必须通过ajax加载页面。。。如果你想混合使用ajax和NoAjax,也许你可以在你的URL中加入一个ajax参数,并根据这个参数调整控制器。这是我认为可以解决我问题的方法,但是在URL中应该有这个参数。如果我只是将其作为URL中的最后一个参数,并且我没有在控制器中指定方法,例如myurl.com/controller1/ajax\u true,那么它会查找方法ajax\u true。但这没关系,因为只有在进行ajax调用时,您才需要
index
(myurl.com/controller1/index/where
),您的常规url仍然是myurl.com/controller1
,因为控制器中的ajax参数默认为false。没有难看的URL。不太清楚否决投票的理由。。。
function load_page($page, $data) {
if(!$this->input->is_ajax_request()) {
$this->load->view('header_view');
$this->load->view('navigation_view');
}
$this->load->view($page, $data);
if(!$this->input->is_ajax_request()) {
$this->load->view('footer_view');
}
}