2017-05-09 10 views
0

私は簡単なブログを作っています。ページにnの投稿を表示し、さらに表示する投稿がある場合は、次のページへのナビゲートボタンを作成し、ユーザーがクリックすると次のページにnの投稿を表示します。私は持っている私のindex.phpでPHPがn個の投稿をページに表示

class PageManager { 

     private $post_id; 
      // id of the latest post in the db 

     public function __construct() { 
      $this->post_id = PostManager::getLatestPostID(); 
     } 

     public function displayPage() { 

      if (isset($_GET['page'])) { 
      $page_id = $_GET['page'] + 0; 
      } 
      else { 
      $page_id = 1; 
      } 

     $this->post_id = PostManager::displayNPosts(10, $this->post_id); 
      // $1 -> number of posts to display, $2 -> first post to display 
      // returning the last displayed post id or false if we displayed all posts from the db 

     // if there are still posts to display -> create navigation button to the next page 
     if ($this->post_id) { 
     echo '<div class = "container">'; 

     echo '<ul class = "pager">'; 
     echo '<li onclick = "show('.($page_id + 1).')"><a href = "index.php?page='.($page_id + 1).'">Next page</a></li>'; 
     echo '</ul>'; 

     echo '</div>'; 
     } 
    } 

$pm = new PageManager(); 
$pm->displayPage(); 

あなたが簡単に推測できるとおり、毎回私はOOPでそれをやっている

は、私はこのようになりますクラスPageManagerを持っていますユーザーが「次のページ」ボタンをクリックすると、index.phpがロードされるたびに新しい$pmが作成されるため、同じnの投稿が表示されます。私はそれを行うための素敵で簡単な方法を探しています。

教えてください、私を責めないでください。 ありがとうございます。

答えて

0

$_GET['page']を直接使用しないでください。それをパラメータとして取得し、別のファイル(おそらくコントローラ)経由で送信します。データを送信する前に、そのデータを整数に検証またはキャストします。直接$_GET['page']を使用しないでください。

public function displayPage(int $page_id = 1) { 

    $this->post_id = PostManager::displayNPosts(10, $this->post_id); 
     // $1 -> number of posts to display, $2 -> first post to display 
     // returning the last displayed post id or false if we displayed all posts from the db 

    // if there are still posts to display -> create navigation button to the next page 
    if ($this->post_id) { 
    echo '<div class = "container">'; 

    echo '<ul class = "pager">'; 
    echo '<li onclick = "show('.($page_id + 1).')"><a href = "index.php?page='.($page_id + 1).'">Next page</a></li>'; 
    echo '</ul>'; 

    echo '</div>'; 
    } 

$pm = new PageManager(); 
// Validate the data. e.g: 
$page = (!is_empty($_GET['page']) && is_int($_GET['page'])) ? $_GET['page'] : 1; 
// You may use [filter_input][1] function for validation also 
$pm->displayPage($page); 

あなたの$ this - > post_idの= PostManager :: displayNPostsコールにページパラメータを渡す必要があります。パラメータを送信しない限り、常に同じ投稿を取得します。 page_idパラメータを取得しますが、ナビゲーションリンクにのみ使用します。私は最初のパラメータ-10-は限界であり、第2のパラメータはオフセットされていると思います。したがって、ページ番号に10を掛ける必要があります(各ページに最大10個のアイテムを表示する場合)。これをdisplayNPosts関数の2番目のパラメータとして使用する必要があります。

+0

答えとparamsを送信して検証する良い方法をありがとう。しかし、不幸にも私の問題は解決されませんでした。なぜなら、index.phpが読み込まれるたびに新しい '$ pm'オブジェクトを作り続けているから、同じ記事を何度も何度も表示しているということです。 – RaspberryJam

+0

入手しました。 $ this-> post_id = PostManager :: displayNPostsコールにページパラメータを渡す必要があります。パラメータを送信しない限り、常に同じ投稿を取得します。 page_idパラメータを取得しますが、ナビゲーションリンクにのみ使用します。 displayNPosts関数の仕組みは?私は最初のパラメータ-10-は限界であり、第2のパラメータはオフセットされていると思います。したがって、ページ番号に10を掛けて2番目のパラメータとして使用する必要があります。 –

関連する問題