一个视图上的2个Codeigniter控制器查询

时间:2009-11-12 00:49:35

标签: php codeigniter

如何将同一控制器中的两个不同功能输出放入同一视图(页面)? 例如,我有一个函数转到“article”div,以及我试图在“aside”div中使用的另一个函数。 (在这里使用HTML 5术语)

我已经在(视图)旁边div中使用了实际的数据库查询,它仍然只显示第一篇文章功能。

我已将$ 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);
}

它们背后的模型是对数据库的基本调用

现在视图中的代码与上面的第一个函数(在文章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的第二个代码(与上面的第二个函数一起使用)

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;

最后一段代码只会从第一个函数中获取数据,无论我做什么。

2 个答案:

答案 0 :(得分:2)

要在页面上使用两次视图,或者从一个控制器路径使用两个不同的视图,请为每个视图调用$this->load->view()一次,但仅传递$data一次。这意味着使用不同的键或数组元素将所有模型数据添加到单个$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并调用{ {1}}(因为大多数页面都有页眉,页脚,侧边栏,导航栏,然后是中间的一些独特视图)。

示例:

$this->view('unique-part')

请注意,页眉/页脚位于_parts文件夹中,在其他路径中共享。 CodeIgniter缓存视图数据,以便在给定路径中引用它的第一个视图之后,数据可用于任何视图。

答案 1 :(得分:0)

我认为这是模块化方法的工作:https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

  

问。什么是模块化HMVC,我为什么要使用它?

     

A。模块化HMVC =多个MVC三元组

     

当您需要在a中加载视图及其数据时,这非常有用   视图。考虑将购物车添加到页面。购物车   需要自己的控制器,可以调用模型来获取购物车数据。然后   控制器需要将数据加载到视图中。所以而不是   主控制器处理页面和购物车,购物   购物车MVC可以直接在页面中加载。主控制器   不需要了解它,并且与它完全隔离。

     

在CI中,我们不能为每个请求调用多个控制器。因此,到   实现HMVC,我们必须模拟控制器。它可以完成   库,或者使用这种“Modular Extensions HMVC”贡献。

     

使用库和“Modular HMVC”HMVC之间的差异   class是:1)无需在HMVC中获取和使用CI实例   class 2)HMVC类存储在modules目录中而不是   库目录。

Bonfire也使用HMVC。