2015-06-16 41 views
0

我想在單個控制器功能中調用其他視圖並希望單擊鏈接時更改一個視圖。如何在單個控制器功能中調用多個視圖

例如,當我點擊about_us鏈接時,應該打開about_us,當我點擊contact_us鏈接時,它應該用about_us視圖替換,但整個視圖使用jQuery和ajax保持不變。我不知道jQuery和阿賈克斯。如何做到這一點?

我的看法代碼

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

儘管您可以在另一個視圖中加載視圖,但無法在控制器中加載多個視圖。這裏是你詳細的答案。 http://stackoverflow.com/questions/9402924/how-to-load-view-into-another-view-codeigniter-2-1 – Haroon

+0

首先你需要在一個類的函數內部編寫代碼。你不能像你那樣編寫代碼。你可以在控制器中加載多個視圖。 –

+1

@哈羅姆你錯了,你也可以從控制器載入多個視圖。 –

回答

3

視圖(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()」 內標記

。所以當用戶點擊關於我們鏈接時,javascript的loadaboutus()函數將調用控制器的loadaboutus()函數。

Javascript的阿賈克斯:

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

你有三個環節:

  1. /家
  2. /C ontact_us
  3. /FAQ

這些是三個單獨的控制器。點擊鏈接後,頁面將重新加載。

所以你需要三個控制器。

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

這可能不是理想的做法,但是因爲你是一個新人,這是一個很好的學習步驟。

+0

謝謝 是否有可能創建三個控制器。但點擊一個鏈接所有視圖不會重新加載,但contact_us將顯示使用ajax和jQuery。 –

+0

您在'top_menu'之後錯過了一個'''',可能從ops代碼複製出來,而OP也犯了同樣的錯誤。 –

+0

Woops!你是對的。現在解決這個問題。下面的回答是你所追求的。 – LifeSteala

0

這個你必須使用下面的代碼共同文件的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); 
    } 
相關問題