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";
}

回答の条件
  • 1人5回まで
  • 登録:2010/10/18 12:25:50
  • 終了:2010/10/24 02:15:49

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/10/19 10:55:14

ポイント35pt

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

$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

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

id:sitokositoko

できました!

2010/10/24 02:15:35

その他の回答(1件)

id:Galapagos No.1

Galapagos回答回数963ベストアンサー獲得回数892010/10/18 15:40:00

ポイント35pt

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


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

次のページへ$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";
?>
id:sitokositoko

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

2010/10/18 21:17:03
id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/10/19 10:55:14ここでベストアンサー

ポイント35pt

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

$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

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

id:sitokositoko

できました!

2010/10/24 02:15:35
  • id:rouge_2008
    先ほどIDコールでもお願いしましたが、自動終了される前に回答のオープンをお願いします。
    オープンされないまま終了されると、受け取り率が下がってしまいます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません