2017-05-09 7 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이 사용자가 '다음 페이지'버튼을 클릭하면 index002.php가로드 될 때마다 새 $pm을 생성하기 때문에 페이지에 동일한 n 글이 표시됩니다. 나는 그것을 할 수있는 좋고 간단한 방법을 찾고있다.

제발 저를 비난하지 마십시오. 미리 감사드립니다.

답변

0

$_GET['page']을 직접 사용하지 마십시오. 매개 변수로 가져 와서 다른 파일 (어쩌면 컨트롤러)을 통해 보내십시오. 전송하기 전에 데이터의 유효성을 검사하거나 정수로 변환하십시오. 직접 $_GET['page']을 사용하지 마십시오.

$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); 

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

당신은 당신의 $ this-> post_id를 = PostManager에 페이지 매개 변수를 전달해야 :: displayNPosts 전화. 매개 변수를 보내지 않으면 항상 같은 게시물을 얻습니다. page_id 매개 변수를 가져 오지만 탐색 링크에만 사용하십시오. 첫 번째 매개 변수 인 -10-는 제한이고 두 번째 매개 변수는 오프셋이라고 생각합니다. 따라서 각 페이지 당 최대 10 개의 항목을 표시하려면 페이지 번호에 10을 곱하여 displayNPosts 함수의 두 번째 매개 변수로 사용해야합니다.

+0

답장을 보내 주셔서 감사 드리며 매개 변수를 보내고 확인하는 좋은 방법이 있습니다. 하지만 불행히도 내 문제는 해결되지 않았다. 왜냐하면 index.php가로드 될 때마다 새로운 '$ pm'개체를 만들고 있기 때문에 동일한 게시물을 계속해서 표시하고 있음을 의미한다. – RaspberryJam

+0

알았습니다. $ this-> post_id = PostManager :: displayNPosts 호출에 페이지 매개 변수를 전달해야합니다. 매개 변수를 보내지 않으면 항상 같은 게시물을 얻습니다. page_id 매개 변수를 가져 오지만 탐색 링크에만 사용하십시오. displayNPosts 기능은 어떻게 작동합니까? 첫 번째 매개 변수 인 -10-는 제한이고 두 번째 매개 변수는 오프셋이라고 생각합니다. 따라서 페이지 번호에 10을 곱하여 두 번째 매개 변수로 사용해야합니다. –