2012-01-03 9 views
0

私は3つのテーブルsite_settings、説教&説教者があります。 site_settingsテーブルで、表示される説教者の最大数を設定します。説教師のテーブルにはすべての説教者の詳細が含まれ、説教テーブルにはすべての説教者の説教が含まれています。宣教師を表示するために改ページを使用しています(2 /ページ)。 site_settingsテーブルの値が1または2の場合、説教師の数は2、3または4の場合は説得者4 ...何が起こっているのかわかりません。ページネーションや制限に問題はありますか?あなたが二回の制限を使用している、コメントで述べたように、私はモデルページ区切りと制限付きの問題

のメソッド
function viewAll($offset=0, $limit=null) { 

     $this->db->select('settings_value'); 
     $this->db->from('site_settings'); 
     $this->db->where('settings_name', 'preachercount'); 
     $count = $this->db->get()->row(); 
     echo $count->settings_value; 

     $preacher = array(); 
     $this->db->select('preacher.preacher_id,preacher.first_name,preacher.last_name,preacher.preacher_image,preacher.preacher_logo,preacher.preacher_bio_brief'); 
     $this->db->distinct('preacher.preacher_id'); 
     $this->db->from('preacher'); 
     $this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id'); 
     $this->db->order_by('preacher.sort_order'); 
     $this->db->limit($count->settings_value); 
     $query = $this->db->get('', $limit, $offset); 
     if ($query->num_rows() > 0) { 

      foreach ($query->result() as $row) { 
       $preacher[$row->preacher_id]['preacher_id'] = $row->preacher_id; 
       $preacher[$row->preacher_id]['preacher_name'] = $row->first_name . ' ' . $row->last_name; 
       $preacher[$row->preacher_id]['preacher_image'] = $row->preacher_image; 
       $preacher[$row->preacher_id]['preacher_logo'] = $row->preacher_logo; 
       $preacher[$row->preacher_id]['preacher_bio_brief'] = $row->preacher_bio_brief; 

       $this->db->select('*'); 
       $this->db->from('sermons'); 
       $this->db->where('preacher_id', $row->preacher_id); 
       $this->db->order_by('sort_order '); 
       $sermon_array = array(); 

       $query = $this->db->get(); 
       if ($query->num_rows() > 0) { 
        foreach ($query->result() as $row1) { 
         $sermon_array[$row1->sermon_id] ['sermon_image'] = $row1->sermon_image; 
         $sermon_array[$row1->sermon_id] ['sermon_title'] = $row1->sermon_title; 
         $sermon_array[$row1->sermon_id] ['audio_file'] = $row1->audio_file; 
         $sermon_array[$row1->sermon_id] ['sermon_description'] = $row1->sermon_description; 
        } 
       } 
       $preacher[$row->preacher_id]['sermon'] = $sermon_array; 
      } 
      return $preacher; 
     } 
     return false; 
    } 

コントローラのメソッド

function list() { 

     $paginate_segment = $this->uri->segment(3) ? $this->uri->segment(3) : 0; 
     $winner_list = $this->sermon_model->viewAllpreachers(0, null); 
     $config['base_url'] = base_url() . 'sermons/index/'; 
     $config['total_rows'] = ($winner_list) ? count($winner_list) : 0; 
     $config['per_page'] = 2; 
     $config['full_tag_open'] = ''; 
     $config['full_tag_close'] = ''; 
     $config['uri_segment'] = 3; 
     $config['num_links'] = 4; 
     $config['display_pages'] = TRUE; 
     $config['first_link'] = 'First'; 
     $config['first_link'] = 'First'; 
     $config['first_tag_open'] = '<div>'; 
     $config['first_tag_close'] = '</div>'; 
     $config['last_link'] = 'Last'; 
     $config['next_link'] = 'Next'; 
     $config['prev_link'] = 'Prev'; 
     $config['cur_tag_close'] = ' | '; 
     $config['num_tag_close'] = ' | '; 

     //initialize pagination 
     $this->pagination->initialize($config); 
     $this->data['preachers'] = $this->sermon_model->viewAllpreachers($paginate_segment, $config['per_page']); 
     $this->data['links'] = $this->pagination->create_links(); 
     $this->data['page'] = $this->config->item('APP_template_dir') . 'site/home/sermons_view'; 
     $this->load->vars($this->data); 
     $this->load->view($this->_container); 
    } 
+0

あなたは2回制限しています。 $限界が引数として渡されない場合、設定テーブルに "フォールバック"したいですか? – landons

+0

私はuを得ることができませんでした説明することができます – Natasha

+0

あなたは結果を1)$ this-> db-> limit()と$ limitと$ offsetパラメータの明示的な呼び出しで制限しています$ this-> db-> get()の私の推測では、あなたは$限界値としてNULLを渡しているということです、そして、私はCIが何をしているのか分かりません。 – landons

答えて

0

(モデルでは)このため、次のコードを使用していますし、これらの方法を組み合わせる必要があります。

function viewAll($offset=0, $limit=null) { 

    $this->db->select('settings_value'); 
    $this->db->from('site_settings'); 
    $this->db->where('settings_name', 'preachercount'); 
    $count = $this->db->get()->row(); 

    // now use value of [$count] if [$limit] is null - else use [$limit] 
    $limit = (is_null($limit)) ? $count : $limit ; 

    $preacher = array(); 
    $this->db->select('...'); 
    $this->db->distinct('preacher.preacher_id'); 
    $this->db->from('preacher'); 
    $this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id'); 
    $this->db->order_by('preacher.sort_order'); 
    // then remove the [limit()] call 
    // $this->db->limit($count->settings_value); <-- NOT NEEDED 
    $query = $this->db->get('', $limit, $offset); 

これにより、効果的に$limitをメソッドに追加するか、dbの設定を使用します。

関連する問題