2009-11-12 16 views
1

如何將兩個不同的功能從同一個控制器輸出到同一視圖(頁面)? 例如,我有一個函數去「文章」股利,另一個功能,我試圖在「旁邊」div內使用。 (在這裏使用HTML 5命名法)2一個視圖上的Codeigniter控制器查詢

我已經儘可能在(視圖)旁邊div中使用實際的數據庫查詢,它仍然只顯示第1條文章函數。

我改變了$ data('result')變量來分隔變量,這沒有什麼區別。

我正在展示我必須在文章div中完成的待辦事項列表,然後在旁邊div中顯示已完成的待辦事項的標題。

我想我正在弄亂這個解釋。你會使用不同控制器的功能嗎?

這是在控制器

function index() 
{ 
    $this->load->model('work_m'); 
    $data = array(); 
    $config['base_url'] = base_url() . 'index.php/work/index/'; 
    $config['total_rows'] = $this->db->count_all('work'); 
    $config['per_page'] = '10'; 
    $config['full_tag_open'] = '<div id="pagination">'; 
    $config['full_tag_close'] = '</div>'; 
    $this->pagination->initialize($config); 
    $data['result'] = $this->work_m->get_records($config['per_page'], $this->uri-> 
     segment(3)); 

    $tmpl = array('table_open' => 
     '<table border="0" cellpadding="0" cellspacing="0">', 'heading_row_start' => 
     '<tr class="heading">', 'heading_row_end' => '</tr>', 'heading_cell_start' => 
     '<th>', 'heading_cell_end' => '</th>', 'row_start' => '<tr>', 'row_end' => 
     '</tr>', 'cell_start' => '<td>', 'cell_end' => '</td>', 'row_alt_start' => 
     '<tr class="alt">', 'row_alt_end' => '</tr>', 'cell_alt_start' => '<td>', 
     'cell_alt_end' => '</td>', 'table_close' => '</table>'); 
    $this->table->set_template($tmpl); 
    $this->table->set_caption("Work Items"); 

    //-- Header Row 
    $this->table->set_heading('ID', 'Date', 'Title', 'Done', 'Item'); 

    //-- Content Rows 

    $data['title'] = 'Page Display'; 
    $this->load->view('work_links', $data); 

注意它指向work_links,視圖

下一個功能是本

function done() 
{ 

    $data = array(); 
    if ($query = $this->work_m->dead_work()) { 
     $data['dead'] = $query; 
    } 
    $tmpl = array('table_open' => 
     '<table border="0" cellpadding="0" cellspacing="0">', 'heading_row_start' => 
     '<tr class="heading">', 'heading_row_end' => '</tr>', 'heading_cell_start' => 
     '<th>', 'heading_cell_end' => '</th>', 'row_start' => '<tr>', 'row_end' => 
     '</tr>', 'cell_start' => '<td>', 'cell_end' => '</td>', 'row_alt_start' => 
     '<tr class="alt">', 'row_alt_end' => '</tr>', 'cell_alt_start' => '<td>', 
     'cell_alt_end' => '</td>', 'table_close' => '</table>'); 
    $this->table->set_template($tmpl); 
    $this->load->view('work_links', $data); 
} 

他們背後的模型是基本通話費第一碼到數據庫

現在,這個代碼在視圖中隨着fi上述第一個功能(在文章DIV)和完美的作品

foreach($result as $row) 
{ 
$this->table->add_row(
anchor("work/fill_form/$row->id", $row->id), 
$row->date, 
$row->title, 
$row->compl, 
$this->typography->auto_typography($row->item) 
); 
} 
$table = $this->table->generate(); 
echo $table; 

這是第二個代碼進入一旁的div(與上面的第二個functiin雲)

if (isset($dead)){ 

foreach($dead as $row) 
{ 
$this->table->add_row(
$row->id, 
$row->title, 
$row->finish 
); 
    } 
} 
$this->table->set_heading('ID', 'Title'); 
$table = $this->table->generate(); 
echo $table; 

最後一個代碼只無論我做什麼,都會從第一個函數中獲取數據。

+0

您是否嘗試過只調用中的第一個其他的控制器功能? – Franz 2009-11-12 00:55:44

+0

你甚至可以使用一個類變量,而不是'$ data',雖然這可能有點髒... – Franz 2009-11-12 00:57:08

+0

我真的試圖讓你想說什麼......我不能..你可以把一些代碼,這樣我們至少可以看到你做了什麼? – 2009-11-12 01:13:59

回答

2

要在一個頁面上使用兩次視圖,或者使用一個控制器路由中的兩個不同視圖,請爲每個視圖調用$this->load->view()一次,但只傳遞一次$data一次。這意味着使用不同的鍵或數組元素將所有模型數據添加到單個變量中。

例子:

$this->data = array(
    'people' => $this->SomeModel->list1(), 
    'dogs' => $this->SomeModel->list2()); 
$this->load->view('list-view', $this->data); 
$this->load->view('list-view'); 
$this->load->view('footer'); 

對於很多我自己的網站中,我用一個實現了view()功能,使每個控制器航線只需要填充$this->data加載我的每一個普通網頁的部分特殊的基本控制器和請致電$this->view('unique-part')(因爲大多數頁面都會有頁眉,頁腳,側邊欄,導航欄,然後是中間的一些獨特視圖)。

實施例:

function page($p, $extra) { 
    $this->load->view('_parts/header', array_merge($this->data, $extra)); 
    $this->load->view("$base/sidebar"); 
    $this->load->view("$base/$p"); 
    $this->load->view('_parts/footer'); 
} 

注意,頁眉/頁腳處於_parts文件夾,其它途徑之間共享。 CodeIgniter緩存視圖數據,以便數據在第一個視圖之後在任何視圖中可用,這些視圖在給定路由中引用它。

+0

啊我明白了,不管我在第二個功能是做只有第一個問題,因爲我使用$數據進行兩次 – Brad 2009-11-12 02:08:31

+0

但如果我這樣做,那麼第二個功能,生成的表將有沒有掛鉤使用什麼數據。 我的大部分網頁都使用3個部分,一個模板。在頁眉頁腳旁邊,我指出我稱之爲內容的觀點。我試圖擺脫它,因爲它使每個頁面都一樣,並且/或者將創建一個怪物文件系統。但我想我可以爲每個頁面創建一個子文件夾並使用模板方法 – Brad 2009-11-12 02:19:01

+0

我更新了我的答案以顯示我如何處理頁眉/頁腳......並提及CodeIgniter緩存給定CGI請求的視圖數據。 – 2009-11-13 01:09:23

0

我認爲這是一個模塊化的方式工作:https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

問:什麼是模塊化HMVC,我爲什麼要使用它?

A.模塊化HMVC =多MVC黑社會

當你需要加載 視圖中的視圖和數據,這是最有用的。考慮將購物車添加到頁面上。購物車 需要自己的控制器,它可能會調用一個模型來獲取購物車數據。然後 控制器需要將數據加載到視圖中。因此,而不是在 主控制器處理頁面和購物車,購物車 MVC可以直接在頁面加載的。主控制器 不需要知道它,並且完全與它隔離。

在CI我們不能稱之爲每個請求超過1級的控制器。因此,要實現HMVC,我們必須模擬控制器。它可以通過 庫或使用此「模塊化擴展HMVC」貢獻完成。

使用庫和一個「模塊化HMVC」 HMVC 類之間的差異是:1)無需獲得和HMVC 類2)HMVC類存儲在一個模塊的目錄,而不是內使用CI實例 庫目錄。

Bonfire也使用HMVC。

相關問題