2016-04-20 8 views
0

私は7つの異なる入力を受け入れ、5つの異なるテーブルのデータを照会するためにそれらの値を使用する検索フォームを持っています。フェッチされた行はCodeIgniterコントローラに返され、ビューに表示されますがページ番号が付けられます。codeigniterを使用してフォーム検証をスキップする3 paginaiton

他の入力固有の検証と並んで、ユーザーが検索用に提供した7つのフィールドのうち少なくとも1つの値もチェックしています。そうでなければ、我々はエラーを投げる。

次のコードは正常に動作し、データを照会してページングを表示しますが、コントローラが検索フォームを再ロードして失敗するフォーム検証を実行するため、ページングリンクの2ページ目をクリックするとブレークします。

コントローラコードが検証を実行し、データを取得し、ページ付けする:代わりに、改ページの2ページ目(次の2行)を表示するので

public function search_metadata_database() 
{ 
    $arr = array(); 
    $data = $this->input->post(); 

    foreach ($data as $key => $value) 
    { 
     if($value) 
     { 
      $arr[$key] = $value; 
     } 
    } 

    if(count($arr) < 1) 
    { 
     $this->session->set_flashdata('metadata_search_message', 'Please provide atleast one input!'); 
     redirect('Metadata/search_metadata_view'); 
    } 
    else 
    { 
     if($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('pages/metadataview/metadata_search'); 
      $this->load->view('pages/metadataview/metadata_form'); 
     } 
     else 
     { 
      foreach ($arr as $key => $value) 
      { 
       $arr[$key] = $this->get_master_id_by_name($key,$value); 
      } 

      $this->load->helper('url'); 
      $this->load->library('pagination'); 
      $config['base_url'] = site_url('Metadata/search_metadata_database'); 
      $config['total_rows'] = $this->metadata_model->fetch_metadata_record_count($arr); 
      $config['per_page'] = "2"; 
      $config["uri_segment"] = 2; 
      $choice = $config["total_rows"]/$config["per_page"]; 
      $config["num_links"] = floor($choice); 
      $config['full_tag_open'] = '<ul class="pagination">'; 
      $config['full_tag_close'] = '</ul>'; 
      $config['first_link'] = false; 
      $config['last_link'] = false; 
      $config['first_tag_open'] = '<li>'; 
      $config['first_tag_close'] = '</li>'; 
      $config['prev_link'] = '&laquo'; 
      $config['prev_tag_open'] = '<li class="prev">'; 
      $config['prev_tag_close'] = '</li>'; 
      $config['next_link'] = '&raquo'; 
      $config['next_tag_open'] = '<li>'; 
      $config['next_tag_close'] = '</li>'; 
      $config['last_tag_open'] = '<li>'; 
      $config['last_tag_close'] = '</li>'; 
      $config['cur_tag_open'] = '<li class="active"><a href="#">'; 
      $config['cur_tag_close'] = '</a></li>'; 
      $config['num_tag_open'] = '<li>'; 
      $config['num_tag_close'] = '</li>'; 

      $this->pagination->initialize($config); 
      $data['page'] = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; 
      $data['songList'] 
      = $this->metadata_model->fetch_metadata_record($arr,$config["per_page"], $data['page']); 
      $data['pagination'] = $this->pagination->create_links(); 
      $this->load->view('pages/metadataview/metadata_search'); 
      $this->load->view('pages/metadataview/metadata_pagination',$data); 
     } 
    } 
} 

、私は次のビューにリダイレクト取得しています:

$this->load->view('pages/metadataview/metadata_search'); 
$this->load->view('pages/metadataview/metadata_form'); 

「少なくとも1つの入力を入力してください!」というメッセージとともに

ページングリンクをナビゲートしている間にフォームの検証をスキップして、他のユーザーが検索ボタンをクリックしたときに動作させる方法を教えてください。それはちょうどあなたのコントローラ内のコードの下にこれを使用した後、すべての

+0

if($ this-> form_validation-> run()&& isset($ _ POST ['submit'])) –

答えて

0

まずちょうどライブラリフォルダ>

class MY_Pagination extends CI_Pagination { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function curr_page() { 
     return $this->cur_page; 
    } 
} 

をアプリケーション内のライブラリを作成します。

if($this->form_validation->run() == FALSE && $this->curr_page <= 1) 
     { 
      $this->load->view('pages/metadataview/metadata_search'); 
      $this->load->view('pages/metadataview/metadata_form'); 
     } 
関連する問題