2012-04-16 3 views
0

私のリストに検索を追加しようとしています。私はリスト表示のためにcodeigniterとpaginationを使用しています。検索はサンプルIDとしてのデータベース検索です。検索はページ分割の最初のページで完璧に機能します。しかし、それが他のページになるとうまくいきません。ページシノニムでコードネイターでの検索が機能しない

これは私のコントローラのコードです。

$this->clear_sample_id_catche(); 
    $out=$this->Mgeneral->listData(); 
    $per_page = 10; 
    $total = $this->Mgeneral->countData(); 
    $data = $this->Mgeneral->listData($per_page, $this->uri->segment(3)); 

    $base_url = site_url('general/listData'); 

    $config['base_url'] = $base_url; 
    $config['total_rows'] = $total; 
    $config['per_page'] = $per_page; 
    $config['uri_segment'] = '3'; 

    $this->pagination->initialize($config); 
    $data=array('body'=>'list','out'=>$data); 

    $this->load->view('template',$data); 

私は自分のビューで検索するためのフォームを追加しました。 誰かが私の問題を示唆することはできますか? ありがとうございます。

+0

コード内の検索パラメータは表示されません。これはポストデータで使用している可能性がありますが、codeignitersページネーションはリダイレクトベースであるため、次回のリクエストで検索パラメータが失われると思います。 –

+1

検索でページを設定するには、取得メソッドを使用するか、投稿された検索パラメータをフォームの非表示フィールドに格納する必要があります。次のページに検索パラメータが表示されます – Broncha

答えて

4

ページネーションの検索クエリを渡すことを忘れる必要があります。ページ番号がクエリ文字列の3番目のセグメントであることを確認すると、ユーザーがサブミットしたときに検索フォームがPOSTアクションを実行すると推測しています。ユーザーがフォームを送信した後は、もちろん動作します。彼らはちょうどPOSTリクエストを行い、$this->input->post('user_input')または類似のものを使用して$_POSTから検索クエリを取得したためです。しかし、ページ番号のリンク(GET要求)をクリックして別のページに移動しようとすると、スーパーグローバル$_POSTの配列が空であるため検索に失敗します。

この問題を解決するソリューションは、ユーザー入力に基づいて、そして$_POSTの検索クエリを使用する代わりにセッション値(CodeIgniterのセッションクラスを使用することをお勧めします)を設定し、代わりにセッションに格納されている値を使用することです。

もう1つの方法は、検索結果の別のページを作成することです(現在、フォームと同じページ、つまり同じコントローラ関数内にあると仮定します)。次に、検索フォームにの検索クエリをエンコードし、.のコード化された文字列の=(等号)を置き換える独自のコントローラ機能へのGETリクエストを行います。その後、エンコードされた検索クエリをURLクエリ文字列の3番目のセグメント(ページ番号は4番目)に渡しながら、ユーザーを検索結果ページにリダイレクトします。その機能で.=に戻し、base64_decode()を使用して検索クエリを取得し、検索結果を生成する関数に渡します。

もちろん、同じ結果を達成するための他の多くの方法があります。ちょうどそれをGoogle。

+0

私の問題。助けてくれてありがとう。 –

関連する問題