人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPにてXMLから取得したデータを数十件づつページごとに分割をして表示(ページャー)をしたいです。PEAR Pagerは使わないでださい。実際にコードを書いてくださると助かります。現在は全件表示するのみに留まっています(以下ソース。class名は消しています)

$tmpData = file_get_contents($url);
$tmpData = str_replace('dc:creator', 'Creator', $tmpData);
$rss = simplexml_load_string($tmpData);

foreach ($rss->item as $item) {

echo '<h2 class="">' . $item->Creator . '</h2>';
echo '<div class=""><a href="' . $item->link . '"';
echo '>' . $item->title . '</a></div>';
echo "\n";
}

●質問者: sitokositoko
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as Class DC echo LINK
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Galapagos
●35ポイント

コードは前の回答をご覧ください。


次の表示件数以降を新規ページで表示する場合はどうすればよいでしょうか?

次のページへ$countを渡し、それを$startにします。

すなわち、下記のようなコードになります。

<?php
$nums = 20; //1ページに$num件ずつ表示する
$start = isset($_GET['start']) ? $_GET['start'] : 1;
$myself = basename($_SERVER['SCRIPT_NAME']);

$tmpData = file_get_contents($url);
$tmpData = str_replace('dc:creator', 'Creator', $tmpData);
$rss = simplexml_load_string($tmpData);

echo "<html><body>\n";
$count = 1;
foreach ($rss->item as $item) {
 if ($count >= $start && $count <= $start + $nums) {
 echo '<h2 class="">' . $item->Creator . '</h2>';
 echo '<div class=""><a href="' . $item->link . '"';
 echo '>' . $item->title . '</a></div>';
 echo "\n";
 }
 $count++;
}
echo "<p><a href=\"{$myself}?start={$count}\">Next Page</a></p>\n";
echo "</body></html>\n";
?>
◎質問者からの返答

なんだか次ページ以降が上手く表示されません...


2 ● rouge_2008
●35ポイント ベストアンサー

表示スタート項目ではなく、スタートページを渡す方法にしてみました。

$nums = 5; // 1ページの表示件数※ここだけ任意で設定が必要です。
$maxnum = count($rss->item); // 最大件数を取得
$pages = ceil($maxnum / $nums); // 最大ページ数を計算
$page = (empty($_GET['page'])) ? 1 : $_GET['page']; // 現在のページを取得
$start = ($page - 1) * $nums; // スタートページを設定
$script = basename($_SERVER['SCRIPT_NAME']);

$tmpData = file_get_contents($url);
$tmpData = str_replace('dc:creator', 'Creator', $tmpData);
$rss = simplexml_load_string($tmpData);

// 前ページ・次ページのリンク設定※表示形式は自由に指定してください。
if ($page > 1) $link = '<a href="'.$script.'?page='.($page -1) .'">PREV</a>&nbsp|';
// 各ページへのリンクを表示する場合
for($n = 1; $n <= $pages; $n++) {
if($n == $page){
$link .= '['.$n.']';
} else {
$link .= '[<a href="'.$script.'?page='. $n .'">'.$n.'</a>]';
}
}
if ($page < $pages) $link .= ' <a href="'.$script.'?page='.($page + 1) .'">NEXT</a>';

echo '<div style="margin: 15px 10px;">' . $link . "</div>\n";

$count = 1;
foreach ($rss->item as $item) {
 if ($count > $start && $count <= $start + $nums) {
 echo '<h2 class="">' . $item->Creator . '</h2>';
 echo '<div class=""><a href="' . $item->link . '"';
 echo '>' . $item->title . '</a></div>';
 echo "\n";
 }
 $count++;
}

echo '<div style="margin: 15px 10px;">' . $link . "</div>\n";


次の質問も参考になるのではないかと思います。

http://q.hatena.ne.jp/1271744321

※継続質問がありますので、そちらも確認してください。

◎質問者からの返答

できました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ