【问题标题】:How to call multiple views in a single controller function如何在单个控制器函数中调用多个视图
【发布时间】:2015-06-16 05:40:49
【问题描述】:

我想在单个控制器功能中调用其他视图,并希望在单击链接时更改一个视图。

例如,当我单击 about_us 链接时,它应该打开 about_us,当我单击 contact_us 链接时,它应该被替换为 about_us 视图,但使用 jQuery 和 ajax 时整个视图保持不变。我不了解 jQuery 和 ajax .怎么可能做到这一点?

我的查看代码是

<ul>
<li class="active"><a href="<?php echo site_url() ?>/about_us">About Us</a></li>
<li><a href="<?php echo site_url() ?>/contact_us">Company Profile</a></li>
<li><a href="<?php echo site_url() ?>/faq">Why Choose Jan Japan</a></li>

我的控制器是

class Home extends CI_Controller
{
    $this->load->view('include/header');
    $this->load->view('top_strip');
    $this->load->view('top_menue);
    $this->load->view('about_us');
    $this->load->view('footer');
}

【问题讨论】:

  • 您不能在一个控制器中加载多个视图,尽管您可以在另一个视图中加载一个视图。这是你的详细答案。 stackoverflow.com/questions/9402924/…
  • 首先您需要在类的函数中编写代码。您不能像以前那样编写代码。您可以在控制器中加载多个视图。
  • @Haroon 你错了。你也可以从控制器加载多个视图。
  • @Shaiful 你说的很对。 Here is link 到证明它的文档。

标签: jquery ajax codeigniter


【解决方案1】:

查看(Header.php):

    <ul>
    <li class="active"><a href="<?php echo site_url() ?>/about_us" onclick="loadaboutus()">About Us</a></li>
    <li><a href="<?php echo site_url() ?>/contact_us">Company Profile</a></li>
    <li><a href="<?php echo site_url() ?>/faq">Why Choose Jan Japan</a></li>
</ul>

<div id="divDynamic"></div>

在这个视图中,我编写了内联 JavaScript

onclick="loadaboutus()"

在标签内。因此当用户点击 About Us 链接时,javascript 的 loadaboutus() 函数将调用控制器的 loadaboutus() 函数。

Javascript-Ajax:

function loadaboutus()
{
$.ajax({
                type: "POST",
                url: "<?php echo base_url(); ?>home/loadaboutus",
                success: function (data) {
                   $('#divDynamic').html(data);
                }
            });
}

控制器:

function loadaboutus()
{
  $this->load->view('about_us');
}

【讨论】:

    【解决方案2】:

    你有三个链接:

    1. /家
    2. /contact_us
    3. /常见问题

    这是三个独立的控制器。当点击链接时,页面会重新加载。

    所以你需要三个控制器。

    class Home extends CI_Controller
    {
        public function index()
        {
            $this->load->view('include/header');
            $this->load->view('top_strip');
            $this->load->view('top_menu');
            $this->load->view('home_page');
            $this->load->view('footer');
        }
    }
    
    class About_us extends CI_Controller
    {
        public function index()
        {
            $this->load->view('include/header');
            $this->load->view('top_strip');
            $this->load->view('top_menu');
            $this->load->view('about_us');
            $this->load->view('footer');
        }
    }
    
    class Contact_us extends CI_Controller
    {
        public function index()
        {
            $this->load->view('include/header');
            $this->load->view('top_strip');
            $this->load->view('top_menu');
            $this->load->view('contact_us');
            $this->load->view('footer');
        }
    }
    

    这可能不是理想的方法,但是因为您是新手,所以这是一个很好的学习步骤。

    【讨论】:

    • 感谢是否可以创建三个控制器。但点击一个链接所有视图都不会重新加载,但contact_us将使用ajax和jquery显示。???
    • 您在top_menu之后错过了',可能是从操作代码复制而来的,OP 也犯了同样的错误。
    • 糟糕!你说得对。现在解决这个问题。下面的响应就是您所追求的。
    【解决方案3】:

    为此,您必须使用以下代码创建一个通用文件 template.php:

       foreach ($views as $view) {
          $this->load->view($view);
       }
    

    现在从控制器调用它:

    只需执行以下操作:

    public function index()
        {
            $data=array('view1'=>"include/header",
                        'view2'=>"top_strip",
                        'view3'=>"top_menu",
                        'view4'=>"contact_us",
                        'view5'=>"footer"
              );
            $this->load->view('template',$data);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多