2013-02-17 171 views
0

我有一個看起來像這樣的方法的控制器的數據組合時,創建分頁鏈接:如何從兩個不同的查詢

public function browsecategory($category_id) 
    {    

     //find any subcategories for this category 
     $this->load->model('category/category_model'); 
        $this->load->model('category/product_category_model'); 
     $records['categories'] = $this->category_model->find_all_by('parent_id', $category_id); 

        //add some product data too. 
        $records['products'] = $this->product_category_model->find_all_by('category_id', $category_id); 
     Template::set('records', $records); 
     Template::render(); 
    }//end browsecategory 

我見過的笨分頁「東西」所有的例子是使用一個查詢。 我需要結合兩個數據集並在一個視圖上提供服務。

有什麼建議嗎?

編輯1

我試着按照以下MDeSilva的建議。儘管分頁對象正確計算了要創建的鏈接數量,但所有項目都顯示在所有頁面上。

這裏是在模型中獲取數據的代碼:

public function get_categories_and_products($limit=12, $offset=0, $category_id=null) 
{ 
    print '<BR>the function got the following offeset:'.$offset; 
    $query = "(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight "; 
    $query = $query."FROM bf_categories cat "; 
    $query = $query."WHERE cat.parent_id=".$category_id; 
    $query = $query." AND cat.category_id <>".$category_id; 
    $query = $query.") UNION ("; 
    $query = $query."SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight"; 
    $query = $query." FROM bf_product p "; 
    $query = $query."Inner join bf_product_category cp "; 
    $query = $query."on p.product_id=cp.product_id "; 
    $query = $query."Where cp.category_id=".$category_id.")"; 

    $this->db->limit($limit, $offset); 
    $catsandprods= $this->db->query($query); 
    return $catsandprods->result() ; 
} 

而這裏的控制器代碼:

public function browsecategory($category_id, $offset=0) 
    { 
      $this->load->library('pagination'); 

      $total = $this->product_model->get_cats_prods_count($category_id); 

      $config['base_url'] = site_url('/product/browsecategory/'.$category_id); 
      $config['uri_segment'] = 4; 
      $config['total_rows'] = $total; 
      $config['per_page'] = 5; 
      $config['num_links'] = 10; 

      $this->pagination->initialize($config); 
      $offset = ($this->uri->segment($config['uri_segment'])) ? $this->uri->segment($config['uri_segment']) : 0; 
         print $offset; 
      //Call the model function here to get the result, 
      $records= $this->product_model->get_categories_and_products(5,$offset,$category_id); 
      //add to breadcrumb trail 
      $this->build_bread_crumb_trail($category_id); 
      $breadcrumbs = $this->breadcrumbs->expand_to_hyperlinks(); 

      Template::set('currentcategory',$category_id); 
      Template::set('breadcrumbs', $breadcrumbs); 
      Template::set('records', $records); 
      Template::render();  
    } 

我調試,我可以看到的代碼行「$ this-> db-> limit($ limit,$ offset);」在模型中不起作用。它總是返回完整的記錄集... 你能告訴我我錯過了什麼嗎? 謝謝。

+0

你的問題到底是什麼?你想爲產品和類別分頁鏈接嗎? – Jeemusu 2013-02-18 02:58:07

回答

0

分頁類並不關心數據源是如何構建的,只是讓你把它想要的數據結果對象交給它。因此,您只需在您的數據查詢中通過限制&偏移量,或者拉出所有數據並在之後進行分片。

但是,我並不真正瞭解您如何將這些不同的數據位合併爲一個結果來顯示 - 您是否嘗試顯示所有類別,然後對產品進行分頁?如果是這樣,你是設置錯誤

+0

不,我打算一起展示所有類別和產品,每個類別和產品都有自己的超鏈接到不同的頁面。類別超鏈接將顯示另一組產品/類別...其中產品超鏈接會將您帶到產品詳細信息頁面。你能給我一個特定的代碼例子,說明我會如何完成這個任務嗎?我在發佈之前嘗試了你描述的內容......但第一個分頁對象只是覆蓋了第二個分頁...所以當你說:「你只需將限制和偏移量傳遞到你的數據查詢中」就可以擴展你的意思。 – dot 2013-02-18 01:25:51

0

只需使用PHP函數array_merge

<?php $beginning = 'foo'; $end = array(1 => 'bar'); 
$result = array_merge((array)$beginning, (array)$end); 
$this->load->view('view.php', $result); 
?> 

和提取根據用於數組的鍵。 這是非常簡單的&工作

1

這是產生在CI分頁鏈接的方式,爲您的要求有連接的查詢,

public function index($offset = 0) { 
    $language_id = 1; 

    $artwork_id = null; 

    if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
     $artwork_id = $this->input->post('serach_artwork_id', TRUE) ? $this->input->post('serach_artwork_id', TRUE) : null; 
     $data['artwork_id'] = $artwork_id; 

    } 

    $this->load->library('pagination'); 
    $limit = 10; 

    $total = $this->Artwork_model->get_artwork_count($language_id, $artwork_id); 

    $config['base_url'] = base_url().'artwork/index/'; 
    $config['total_rows'] = $total; 
    $config['per_page'] = $limit; 
    $config['uri_segment'] = 3; 

    $config['first_link'] = '<< First'; 
    $config['last_link'] = 'Last >>'; 
    $config['next_link'] = 'Next ' . '&gt;'; 
    $config['prev_link'] = '&lt;' . ' Previous'; 
    $config['num_tag_open'] = '<span class="number">'; 
    $config['num_tag_close'] = '</span>'; 

    $config['cur_tag_open'] = '<span class="current"><a href="#">'; 
    $config['cur_tag_close'] = '</a></span>'; 

    $this->pagination->initialize($config); 

    //Call the model function here to get the result, 
    $data['artworks'] = $this->Artwork_model->get_artworks($language_id, $limit, $offset, $artwork_id); 

    $this->template->write('title', 'Artwork : Manage Artwork'); 
    $this->template->write_view('content', 'artwork/index', $data); 
    $this->template->render(); 
} 

下面是一個例子與多個查詢中加入模擬

public function get_artworks($language_id = 1, $limit = 10, $offset = 0, $arwork_id = null) 
    {   
     $this->db->select('a.id, a.price, a.is_shop, at.title,at.status,at.date_added,ats.name as artist_name'); 
     $this->db->from('artworks a'); 
     $this->db->join('artwork_translations at', 'a.id = at.artwork_id'); 
     $this->db->join('artists ats', 'a.artist_id = ats.id'); 
     $this->db->where('at.language_id', $language_id); 
     if(!is_null($arwork_id) && !empty($arwork_id) && $arwork_id != 'all') 
     { 
      $this->db->where('a.id =', $arwork_id); 
     } 
     $this->db->order_by('a.id DESC'); 
     $this->db->limit($limit, $offset); 

     $artworks = $this->db->get(); 

     return $artworks->result(); 
    } 

在查看

<?= $this->pagination->create_links(); ?> 
+0

你可以在我的文章中查看編輯1嗎?謝謝! – dot 2013-02-20 01:47:01

+0

其實..忽略上面的評論。我可能已經找出了我的問題。 – dot 2013-02-20 02:01:51

+0

MDeSilva,我試着按照你的例子,但它不適合我。你可以在我的文章中查看Edit 1嗎?謝謝! – dot 2013-02-20 03:07:15

相關問題