• ベストアンサー

PEAR::Pagerのページ番号の変更

現在Pagerを使ってページ間のリンクを作成しています。 通常ページ番号は   1 2 3  ・・・  と表示されますが、これを  1-100 101-200 201-300 ・・・ という表示に変える事は可能でしょうか。 ご存知の方いらっしゃいましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

PEARモジュールを改修する方法としては、 PEAR/Pager/Jumping.php をエディタで開いて、 ▼編集前 for ($i=$limits[0]; $i<=min($limits[1], $this->_totalPages); $i++) { if ($i != $this->_currentPage) { $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $i); } else { $this->range[$i] = true; $links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; } $links .= $this->_spacesBefore . (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : ''); } return $links; } ▼編集後 for ($i=$limits[0]; $i<=min($limits[1], $this->_totalPages); $i++) { $page_tx = ($i - 1) * $this->_perPage + 1 . '-' . $i * $this->_perPage; // 追加行 if ($i != $this->_currentPage) { $this->range[$i] = false; $this->_linkData[$this->_urlVar] = $i; $links .= $this->_renderLink(str_replace('%d', $i, $this->_altPage), $page_tx); } else { $this->range[$i] = true; $links .= $this->_curPageSpanPre . $page_tx . $this->_curPageSpanPost; // $iを$page_txに修正 } $links .= $this->_spacesBefore . (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : ''); } return $links; } と3か所修正するだけでできます。 ですが、他でもPagerを使用する場合は、 改修したセットを別フォルダにしたほうがよいかもしれません。 また、受け取ったPHP側で実現するには、 ベタな方法しかありません。 // $navi_allにpagerの結果($navi['all'])を代入 $navi_all = $navi['all']; for($i=1;$i<10;$i++){ // $navi_all内を1~10までループ $first = ($i - 1) * $perPage + 1; // 開始数 $last = $i * $perPage; // 終了数 $regexp = ">{$i}</a>"; // ページリンクのマッチ文字列を生成 $num = ">" . $first . "-" . $last . "</a>"; // 置換文字列を生成 $navi_all = str_replace($regexp, $num, $navi_all); // マッチ文字列を置換 $regexp = "&nbsp;{$i}&nbsp;"; // 現在ページのマッチ文字列を生成 $num = "&nbsp;" . $first . "-" . $last . "&nbsp;"; // 現在ページの置換文字列を生成 $navi_all = str_replace($regexp, $num, $navi_all); // マッチ文字列を置換 } print($navi_all."<br/>\n"); もっと効率的な書き方もあるかと思いますが、 例えば、このような置換処理をすることになるかと思います。

yuppinko
質問者

お礼

回答どうもありがとうございます。 実は週末に解決してしまったのですが、頂いた回答も参考にさせて頂きました。 Pagerは複数箇所で使用しているため、PHP側で処理するようにしています。 回答の「$perPage 」の参照の仕方がイマイチ解らなかったのですが、  $perPage  ⇒ 100 と書き換えたらうまくいきました。 ちなみに下記の方法でもうまく行きました。↓↓ function getPage($matches){ $w_page = trim($matches[0], '<>'); $start = $pager->perPage*($cp-1)+1; $end = $pager->perPage*$cp; return '>'.start .'-'.$end.'<'; } $links['all'] = preg_replace_callback('/>[1-9]+</', 'getPage', $links['all']); Pager側の変更もとても参考になりました。 詳しい解説をありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PEARのPagerによるページ番号について

    PEARのPagerを利用して、ページ番号を表示させているのですが、通常1 2 3・・のようにページ番号が表示されますが、これを「2」から表示させることは可能でしょうか? Pagerによって割り振られた2ページ目からということでなく、単に数字の始まりを「2」からにしたいのです。 2 3 4 ・・・と1を表示させずに2から表示させることは可能でしょうか? ご回答宜しくお願い致します。 例) ●通常 1 2 3 4 5 6 NEXT>> ●2から始めたい 2 3 4 5 6 NEXT>>

    • ベストアンサー
    • PHP
  • PEAR Pagerについて

    PHP Pagerのスクリプトを作成したのですが、うまく動きません。 DBに接続、検索、表示、までは動作確認できたのですが、Pagerを作成してからエラーが出るようになってしまいました。検索データ格納らへんがうまくいってないような気がするのですが・・・・。 DB Error: syntax error が出てしまいます。 どなたかアドバイスの程宜しくお願いします。 $result=$conn->query($sql); if(DB::isError($result)){ die($result->getMessage()); } $count=$result->numRows(); print"店舗数は".$count."件です"; while($rs=$result->fetchRow(DB_FETCHMODE_ASSOC)) { require_once('Pager/Pager.php'); $options = array( "totalItems" => $count, "perPage" => 3, "delta" => 5, "urlVar" => "pageNo" ); $pager =& Pager::factory($options); $navi = $pager -> getLinks(); $tenpo_name = $rs['tenpo_name']; print("{$tenpo_name}"); } ?>

    • ベストアンサー
    • PHP
  • PHP PEARのPagerをSmartyで使う

    初めまして、PEARのPagerを勉強していたのですが、Smartyで実装したいと思い試行錯誤していたらうまく表示されなくて困っています。 【PHP】 //PEARの読み込み、Smartyクラスの読み込み、MySQLクラスの読み込みは省略 //上記は正常に動作しています。 // テーブルの行数を数えます $sql = "SELECT COUNT(*) AS cnt FROM table_name;"; //レコード開始位置指定 $start = 0; //最大レコード数を指定 $limit = 10; // データを取り出すSQLを実行します。 $sql = "select * from table_name ORDER BY no DESC LIMIT $start, $limit"; $result = mysql_query($sql); while($rows = mysql_fetch_array($result)){ $res_data[]=array("title"=>$row['title'],"name"=>$row["name"],"no"=>$row["no"]); } //Pagerのパラメータを指定 $params = array( "itemData" => $res_data, "totalItems" => $limit, "perPage" => 6, "delta" =>5, "mode" =>"Jumping" ); //パラメータの連想配列を受け取る $pager =& Pager::factory($params); // ページデータの割り当て処理 foreach($pager->getPageData() as $item){ $res_data_page[] = $item; } //戻る/次/最初/最後のリンクとページリンクを返す $link = $pager -> getLinks(); //現在のページ番号を返す $currentPageID = $pager -> getCurrentPageID(); // テンプレート用に変数を設定 $smarty->assign('data', $res_data_page); $smarty->assign('pageNavi', $link['all']); $smarty->assign('currentPage', $currentPageID); ■tpl <table border="1"> <tr> <th>名前</th> <th>NO</th> <th>タイトル</th> </tr> {foreach from=$data item=i} <tr> <td>{$i.name}</td> <td>{$i.no}</td> <td>{$i.title}</td> </tr> {/foreach} </table> <p>{$pageNavi}</p> <p>{$currentPage}ページを表示</p> 参考URL http://meerweb.blog7.fc2.com/blog-entry-101.html データベースへの接続は出来ていて、ページャー機能は動いています。 取得しているデータ数もあっているのですが、全部1行目のデータだけ表示されます。 どなたか原因が分かる方いらっしゃいましたら、是非ともご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • データの表示の仕方について教えてください(PEAR PAGERの使い方)

    PHP5.2.4 MYSQL14.12DISTRIB5.0.4 WINXP IE=6.0 PEAR PAGERを使って、1ページに10件ずつ表示されるようにしたくて、下のようなコードを書きました。不具合として、1ページ目の10件表示はされるのですが、2ページ目、3ページ目といどうさせても表示が1から10件目とおなじになります。結果セットからのデーターの表示の仕方がおかしいと思ってるんですが、どういうふうにしていいのか 全く判りません。どなたか、素人にも判るようにご教授いただけたらと思います。宜しくお願いいたします。 <?php require_once 'Pager/Pager.php'; $totalItems = 47; $perPage=10; /*ページャーのパラメーター設定 モード:スライディング ページごとの表示数(perpage)カレントページの前後の表示ページ数(dalta)アイテムの数(totalitem)  */ $params = array( 'mode' => 'sliding', 'perPage' => $perPage, 'delta' => 5, 'totalItems' => $totalItems ); /*ページャーインスタンスの生成*/ $pager =& Pager::factory($params); /*ページのデータの取得*/ $links = $pager->getLinks(); print($links["all"]); /*現在のページ番号を取得して配列に入れる*/ $currentPageID = $pager->getCurrentPageID();  /*ページIDのオフセット値を返す*/ $index=($currentPageID-1)*$perPage+1;          if($rows==0){ /* 取り出すデーターがないとき、エラーメッセージを表示 */    print "該当するデータが見つかりませんでした。\n";  }else{ for($i=$index;$i<$index+$perPage;$i++){   if($i<=$totalItems){ $row=mysql_fetch_array($result) ?> <div align="center"> <TABLE border="1"> <TR> <TD colspan="2" width="500" align="center"><?=$row["e"] ?></TD> </TR> <TR> <TD height="45"><?=$row["setumei"] ?></TD> </TR> </TABLE><br><br> <div> <?php } } } ?>

    • 締切済み
    • PHP
  • jQueryのpagerを使ったページで、

    jQueryのpagerを使ったページで、 ページ内リンクを機能させる方法を教えてください。 以下のサイトを参考に、 自動でページング化されるページを作りました。 『ゼロからはじめるpager - Web文章をらくらく分割してみよう』(マイコミ) http://journal.mycom.co.jp/articles/2007/06/19/null/index.html ページング機能は問題なく作動しているのですが、 外部からのページ内リンクがうまく機能しません。 どうしても、ページを開いたときに 一番最初に表示するよう設定しているページが 開いてしまいます。 ----------------------------------------------------------- <例> ページング機能を施したページを"ページA"とします。 "ページA"で2ページ目以降に表示される特定の箇所に <a id="hoge"></a>を設置します。 "ページB"を作ります。 "ページB"に<a href="ページA#hoge">hoge</a>を設置します。 リンク"hoge"をクリックすると、 "ページA"の<a id="hoge"></a>にはジャンプせず、 "ページA"に一番最初に表示されるように 設定されたページが開いてしまいます。 ----------------------------------------------------------- 以上です。 解決策をご存知の方がいらっしゃいましたら ご教授願えますでしょうか。 どうぞ宜しくお願い致します。

  • Pagerで現在表示ページの下線を消したい

    質問です。 「Pager」で「Sliding」モードにした場合、現在表示ページ以外のページへのリンク部分に下線が付くのは良いのですが、現在表示ページにも下線が付いてしまうのがどうも気に入りません。 スタイルシートで「text-decoration:none;」にしても効果がないのですが、なにか良い方法はないでしょうか?

    • ベストアンサー
    • PHP
  • PEAR Pagerを利用してデータの管理をしたいのですが・・・

    Pagerを使ってページ送り機能を自分のホームページに用いたいと思っています。 いろんなサイトを参考にして調べているのですが、理解できなくて困っています。何を勉強して、何を用いるのかという時点です。 どういう知識を身につければいいのかわかる方いらっしゃいましたら教えてください。よろしくお願いします。 ちなみに私がしたいことは、テーブルにのせたデータを100個作って、1ページにつきそのデータを5件ずつ表示させることです。 これはPagerでも可能でしょうか。 またページのデザインはメニューはPHP、デザインはCSSによって行っています。このファイルにpagerを組み込むことはできるでしょうか? 初心者的な内容かもしれませんがよろしくお願いいたします。

    • 締切済み
    • PHP
  • PEAR PAGERでの大量データ処理についての質問

    PEAR PAGERでの大量データ処理についての質問 お世話になっております。 <実行環境> PHP=Ver5.3.1 , db=db2 , smarty使用 例)50万レコードの名称データからある文字列のデータを抽出して画面表示させるPHPですが、   1画面に表示するデータ件数=20件とした場合、抽出されたデータが1万件あった場合、   ページ数=10000/20=500ページになります。 現在、上記例の場合はデータ抽出とページ作成に長時間掛かり、使用に耐えません。 そこで時短策についてご存知の方、よろしくお願いいたします。 <基本的な質問> PEAR PAGERは対象データとして抽出された結果データ(配列)に対してのページング機能と 理解してよろしいですか? <問題解決策の質問> 小生が解決策として考えたのは下記2点なのですが、 1)抽出データのSELECT時にFETCH FIRST 500 の様に、表示対象データ件数を固定してしまい、   それ以上は新たに検索キーワードを入力し直す方法・・・これだとページは25ページで終了。 2)抽出データのSELECT時にBETWEEN m AND n の様にm件目からn件分と定義して置き、   PHPで”次頁”、”前頁”を押した時にPEAR PAGERを抜出してSELECT文を設定し直して   PEAR PAGERを再実行させる方法・・・これだとPAGERはいらない? ---------------------------------- もっと簡単でスマートな方法ご存知ありませんか? PEAR PAGERの有効な使用方法をご教授頂けると幸いです。 *質問文が解り辛かったらお詫びいたします。

    • 締切済み
    • PHP
  • PEAR::Pagerにアンカーリンクを設定したい

    便利にPEAR::Pager を利用していますが アンカーリンクの利用方法(設定方法)が分かりません。 調べてみると、それを書いているページもあるのですが、 知識の無さから、意味が分かりません。。。。 パラメーターに 「'fileName'  => 'test_.php#top2',」 と設定するのかななど考えてやってみましたが、何も変化はありません。 現在 以下のように設定しています。 **GETで色々なクエリは引き継いでいますが、それはうまく行っています。 色々なクエリの後に、アンカー[#top2] はどのように設定したらよいでしょうか。 よろしくお願いいたします。 $params = array( 'mode' => 'sliding', 'perPage' => 10, 'delta' => 5, 'separator' => '', 'curPageSpanPre' => '<span class="current">', 'curPageSpanPost' => '</span>', 'prevImg' => '< 前へ', 'nextImg' => '次へ >', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 0, 'totalItems' => $tcnt, 'altFirst' => '1ページ目へ', 'altPrev' => '前のページへ', 'altNext' => '次のページへ', 'altLast' => '最後のページへ', ); $_GET = $_REQUEST; $pager =& Pager::factory($params); $links = $pager->getLinks();

    • ベストアンサー
    • PHP
  • PEAR::Pagerでチェックボックスデータを保持したいです。

    PEAR::Pagerでチェックボックスデータを保持したいです。 CentOS 5.0 PHP 5.1.6 携帯サイトを作っています。 画像を一覧で表示しているページで、各画像に チェックボックスを付けチェックの入った画像を 次のページで表示しています。 登録されている画像が10枚以上ある場合は、 PEAR::Pagerを使ってページングしているのですが、 2ページ目、3ページ目と遷移した場合にチェックボックスの データを保持する方法をご教授願いたいのです。 ページングはaタグでリンクしていますので、POSTの値を 保持する方法はどうしたもんかと・・・。 携帯なのでjavascriptも使えないので大変困っております。 よろしくお願いいたします。

    • 締切済み
    • PHP