One View 2 Codeigniter Kontrolör querys

2 Cevap php

How do you put two different function outputs from the same controller into the same view(page)? For example, I have a function going to the "article" div, and another function that I am trying to use within the "aside" div. (using HTML 5 nomenclature here)

Ben kenara div kadar (görünüm) gerçek db sorgusunu kullanarak gibi gitti ve hala sadece 1 makale fonksiyonunu gösterir.

Ben $ verileri değişti ('sonuç') değişken değişkenleri ayırmak için ve bu hiç fark etmez.

Sonra kenara div tamamlanan todo yılların başlıklarını gösteren, ben makale div yapmak zorunda işlerin bir yapılacaklar listesi gösteriyorum.

Ben bu açıklama bir karmaşa yapıyorum varsayalım. Farklı bir denetleyici bir fonksiyon kullanmak istiyorsunuz?

Bu denetleyicisi ilk koddur

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

A View, bu work_links işaret Not

sonraki işlevi bu

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

Arkalarında modelleri veritabanına temel çağrılar

Şimdi görünümünde bu kodu (madde div) Yukarıdaki ilk fonksiyonu ile gider ve mükemmel çalışır

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;

Bu bir kenara div içine gitmek için ikinci kod (ve yukarıda ikinci functiin ile gider)

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;

Son kod olursa olsun, yalnızca ben ne birinci işlevi veri alır.

2 Cevap

Bir sayfada iki kez bir görünümü kullanmak, ya da her bir görünüm için bir kez denetleyici rota iki farklı görüş, çağrı $this->load->view() kullanmak, ama $data sadece bir kez geçerken. Bu sizin modeli tüm verileri farklı tuşlarını veya dizi elemanlarını kullanarak, bir tek $data değişkeni eklenir demektir.

Örnek:

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

Benim kendi sitelerin çoğu için, ben her kontrolör güzergâh sadece $this->data ve çağrı doldurmak gerekiyor, böylece view() function benim ortak sayfa parçaların her yük uygulayan özel bir taban denetleyicisi kullanın $this->view('unique-part') (en sayfalarında bir başlık olacak gibi, altbilgi, kenar çubuğu, gezinti çubuğu, ve ortada sonra bazı benzersiz görünümü).

Örnek:

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

Üstbilgi / altbilgi diğer yolları arasında paylaşılan bir _parts klasörde olduğunu unutmayın. Veri belirli bir rota içinde başvuran ilkinden sonra herhangi görünümüne hazır olacak şekilde CodeIgniter görünümü verileri önbelleğe alır.

Ben bu modüler bir yaklaşımı için bir iş olduğunu düşünüyorum: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

Q. What is Modular HMVC, why should I use it?

A. Modüler HMVC = Çoklu MVC triadlar

This is most useful when you need to load a view and its data within a view. Think about adding a shopping cart to a page. The shopping cart needs its own controller which may call a model to get cart data. Then the controller needs to load the data into a view. So instead of the main controller handling the page and the shopping cart, the shopping cart MVC can be loaded directly in the page. The main controller doesn’t need to know about it, and is totally isolated from it.

In CI we can’t call more than 1 controller per request. Therefore, to achieve HMVC, we have to simulate controllers. It can be done with libraries, or with this “Modular Extensions HMVC” contribution.

The differences between using a library and a “Modular HMVC” HMVC class is: 1) No need to get and use the CI instance within an HMVC class 2) HMVC classes are stored in a modules directory as opposed to the libraries directory.

Bonfire da HMVC kullanır.