Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter初始页面加载变量?_Php_Ajax_Codeigniter - Fatal编程技术网

Php CodeIgniter初始页面加载变量?

Php CodeIgniter初始页面加载变量?,php,ajax,codeigniter,Php,Ajax,Codeigniter,我正在寻找一种只在初始页面视图上加载页眉/页脚/导航的解决方案 这背后的原因是,我的导航面板使用Ajax在主content div中呈现目标链接的内容,而不是实际加载页面本身 然而,我需要能够说一些事情,如果它是初始视图,加载页眉,导航,然后是实际页面,然后是页脚。但是,如果它不是初始视图,并且页面加载在contentdiv区域,例如导航链接或表单提交,那么它不会加载页眉、导航和页脚,而只加载实际页面 例如,我有以下4种观点: 标题视图 导航视图 页面视图 页脚视图 该控制器: 控制器a 导航有

我正在寻找一种只在初始页面视图上加载页眉/页脚/导航的解决方案

这背后的原因是,我的导航面板使用Ajax在主content div中呈现目标链接的内容,而不是实际加载页面本身

然而,我需要能够说一些事情,如果它是初始视图,加载页眉,导航,然后是实际页面,然后是页脚。但是,如果它不是初始视图,并且页面加载在contentdiv区域,例如导航链接或表单提交,那么它不会加载页眉、导航和页脚,而只加载实际页面

例如,我有以下4种观点:

标题视图 导航视图 页面视图 页脚视图

该控制器:

控制器a

导航有一个链接,该链接为“页面a”,指向。如果单击该链接,我只希望controller_a加载页面视图,因为导航链接将该页面的数据加载到div中

但是,如果我直接转到,它还需要呈现页眉/导航/页脚

我认为我的解决方案是正确的,它类似于带有函数load_page()的基本控制器,类似于:

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