シンプルなブログを作ってみました。ページ コンテンツの下部に、次および前のブログ エントリへのリンクを表示するページネーションを配置しました。ブログ タイトルは、「pages」というデータベース テーブルの列「menu_name」から取得したリンクに含まれています。これを行うには、最初にクエリを作成し、「ブログ」というクラスの関数を介して配列を作成し、次にいくつかの変数を設定しました。
$sql = "SELECT * FROM pages ";
$sql .= "ORDER BY id DESC ";
$pages = Blog::find_by_sql($sql);
$blog_page = reset($pages);
$page_id = Blog::find_by_id(isset($_GET['page']) ? $_GET['page'] : $blog_page->id);
次に、以前のブログ リンクのコードを次のように作成しました。
public function pagination_previous(){
global $address; //$address = "list_blogs.php?page=";
global $page_id;
global $pagination; //a class for storing functions that handle pagination
global $pages;
if($pagination->has_next_page()){
echo "\n <a class=\"olderblog\" href=" . $address;
echo $pagination->next_page();
echo " title=\"Newer Blog\">« ";
foreach($pages as $page => $value){
if($page_id->id + 1 == $value->id){
echo $value->menu_name;
}
};
echo "</a> ";
}else{
echo "";
}
}
これは関数 has_next_page() です
public function has_previous_page(){
return $this->previous_page() >= 1 ? true : false;
}
これは、previous_page() です。
public function previous_page(){
global $blog;
return $this->current_page - 1;
}
ブログエントリを削除できる管理領域を作成することを決定するまで、これはうまく機能しました。ID が 6 のブログ エントリを削除すると、問題が発生します。データベース テーブル「ページ」に ID=6 のアイテムがなくなるため、行方不明の前後のページの次または前のページへのリンクが失われます。 page は空ですが、has_previous_page() が $current_page から 1 を引くため、まだ page=6 を指しています。pagination_next() 関数を次のように設定することで、この混乱から抜け出す方法を途中で見つけました。
public function pagination_next(){
global $address;
global $pagination;
global $page_id;
global $pages;
if($pagination->has_previous_page()){
foreach($pages as $page => $value){
if($page_id->id - 1 == $value->id){
echo "\n <a class=\"newerblog\" href=" . $address;
echo $value->id;
echo " title=\"Older Blog\">";
echo $value->menu_name;
break;
}
}
echo " »</a> ";
}else{
echo "";
}
}
ただし、これは foreach ループ内の if 条件のためにまだ機能しません。この条件を pagination_previous() と pagination_next() の両方で設定して、id ($value->id) ではなく配列インデックス ($page) に基づいて次と前の配列項目を参照する必要がありますが、わかりませんこれは私の人生のために。配列 $pages は次のようになります。
Array
(
[0] => Blog Object
(
[id] => 8
[subject_id] => 2
[menu_name] => Aliquam sed interdum
[position] => 4
[visible] => 1
[created] =>
[content] =>
Aliquam sed interdum tortor. Vivamus et blandit velit...
[1] => Blog Object
(
[id] => 7
[subject_id] => 2
[menu_name] => Vestibulum ante ipsum
[position] => 3
[visible] => 1
[created] =>
[content] =>
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices...
[2] => Blog Object
(
[id] => 5
[subject_id] => 2
[menu_name] => Praesent massa mi
[position] => 2
[visible] => 1
[created] =>
[content] =>
Praesent massa mi, pretium et leo vitae, aliquam...
[3] => Blog Object
(
[id] => 4
[subject_id] => 2
[menu_name] => Nam interdum tincidunt
[position] => 1
[visible] => 1
[created] =>
[content] =>
Nam interdum tincidunt purus quis lacinia. Aliquam erat volutpat.
)
)
誰かがこれで私を助けることができますか?
ご回答いただきありがとうございますが、残念ながら、私の問題を解決するのに役立つ回答はありませんでした。すべてのオプションを使い果たした後、コード全体を台無しにすることなくこれを解決する唯一の方法は、if 条件で 1 を加算または減算せずに次または前の既存の $value->id を参照する方法を見つけることであると結論付けました。データベースに id がない場合に空のリンクが表示されるため、次のページに移動します。このパズルを解ける人がいたら、私はその人に永遠に感謝します。