質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

3回答

1718閲覧

パラメーターが複数になるとページネーションが動作しない

yuki84web

総合スコア1857

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

1クリップ

投稿2017/04/26 09:17

編集2017/04/26 09:50

http://www.example.com/hoge/1
http://www.example.com/hoge/2
のようにページのインデックス(?)のみが付く場合は動作しますが

http://www.example.com/hoge/1/foo/asc
http://www.example.com/hoge/2/foo/asc
のようにパラメータが増えると必ず指定ページに関わらず1ページ目が表示されてしまいます。

$config['uri_segment'] など指定してみましたが改善しませんでした。
助言宜しくお願い致します。

php

1public function index($page = 1, $sort_column = FALSE, $sort_order = FALSE) 2{ 3 $this->load->library("pagination"); 4 $config["base_url"] = base_url().'hoge'; 5 $config["total_rows"] = 20;//暫定で設定 6 $config["per_page"] = 2; 7 $config["num_links"] = 2; 8 if($sort_column !== FALSE && $sort_order !== FALSE) 9 $config['suffix'] = '/'.$sort_column.'/'.$sort_order; 10 $this->pagination->initialize($config); 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

なるほど。
Controller/action/param1/pram2...
hoge/index/$page/$sort_column/$sort_order
のルールをroute.phpで
hoge/$page/$sort_column/$sort_order

に変えている訳なので、uri_segmentは必要だと思う。
あと後ろに引数を追加するということはfirstlinkも変えなきゃならん気がする。

こんな感じか?

php

1 : 2 $config["uri_segment"] = 2; 3 if($sort_column !== FALSE && $sort_order !== FALSE) { 4 $config['suffix'] = '/'.$sort_column.'/'.$sort_order; 5 $config['first_url'] = $config["base_url"] . '/0/' . $config['suffix']; 6 } 7 :

投稿2017/04/27 00:30

tomomo

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2017/04/27 03:44

実は自分でも調べて解決したのですが、仰る通りuri_segmentを指定する必要がありました。 ページネーションクラスの標準仕様ではURIが /コントローラ/メソッド/ページ番号 というようにページ番号は3番目なっているそうで、 私は /コントローラ/ページ番号 としたので $config["uri_segment"] = 2; を書く必要があったわけですね。 firstlinkと実質最初に戻るprev(firstlinkと同等の扱い?)のリンクにはsuffixが付与されなかったので かなり雑ですがJavaScriptで書き換える処理を書いてしまいました… var href = window.location.href ; var split_site_url = href.split("/"); //URIにパラメータが3つ付いている場合 if (split_site_url.length == 8){ var findUl = document.getElementById('pagination'), findLi = findUl.children; //ページネーションのURLを全て調べる var pagenation_url; var hyperlink_rel; var split_pagenation_url; for (var i = 0; i < findLi.length; i++){ pagenation_url = findLi[i].children[0].href; split_pagenation_url = pagenation_url.split("/"); hyperlink_rel = findLi[i].children[0].rel; if (split_pagenation_url != 8 && hyperlink_rel == "start") { //"最初" //URLを書き換える findLi[i].children[0].href = pagenation_url+"1/"+split_site_url[6]+"/"+split_site_url[7]; }else if (split_pagenation_url != 8 && hyperlink_rel == "prev") { //実質的に"最初"へ戻る「前へ」のリンク //URLを書き換える findLi[i].children[0].href = pagenation_url+"1/"+split_site_url[6]+"/"+split_site_url[7]; } } } が、$config['first_url']で設定出来たのですか…見逃していました。 ありがとうございました。
guest

0

"1ページ目が表示されてしまいます"という表現から曖昧な脳内なのだが、create_links()で表示されたリンクURLがあってるのかどうか。
URLはあってるけど遷移先が違うのであれば、routes.phpで設定したルール、あるいは.htaccessみたいなルールに誤りがないかどうか。。。

投稿2017/04/26 10:08

tomomo

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

$config['suffix']とかいうのを設定する前に、initializeしているからでない?

投稿2017/04/26 09:44

tomomo

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2017/04/26 09:50

申し訳ございません、コードが間違っていましたので修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問