2017-05-09 2 views
0

Ich mache einen einfachen Blog. Ich möchte n Beiträge auf der Seite anzeigen und, wenn mehr Beiträge angezeigt werden sollen, erstellen Sie eine Navigationsschaltfläche auf der nächsten Seite, und wenn der Benutzer darauf klickt, zeigen Sie nächste n Beiträge auf der nächsten Seite und so weiter.PHP-Anzeige n Beiträge auf der Seite

ich es in oop tue, habe ich eine Klasse PageManager, die wie folgt aussieht:

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

In meiner index.php Ich habe:

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

Wie man unschwer erraten kann, jedes Mal Der Benutzer klickt auf die Schaltfläche "Nächste Seite". Die Seite zeigt die gleichen n Posts an, da ich jedes Mal, wenn index.php geladen wird, neue $pm mache. Ich suche nach einem netten und einfachen Weg, es zu tun.

Bitte tadeln Sie mich nicht, nur zu lernen. Vielen Dank im Voraus.

Antwort

0

Verwenden Sie nicht $_GET['page'] direkt in Ihrer Funktion. Holen Sie es als Parameter und senden Sie es über eine andere Datei (vielleicht Controller). Validieren Sie die Daten oder geben Sie sie vor dem Senden in Integer um. Verwenden Sie niemals $_GET['page'] direkt nie.

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

und

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

Sie benötigen eine Seite Parameter zu Ihrem $ this-> post_id = PostManager passieren :: displayNPosts nennen. Es wird immer die gleichen Beiträge erhalten, es sei denn, Sie senden einen Parameter. Sie erhalten den Parameter page_id, verwenden ihn jedoch nur für Navigationslinks. Ich denke, der erste Parameter -10- ist Limit und der zweite Parameter ist Offset. Sie müssen also Ihre Seitenzahl mit 10 multiplizieren (wenn Sie maximal 10 Elemente für jede Seite anzeigen möchten) und sie als zweiten Parameter der displayNPosts-Funktion verwenden.

+0

Danke für die Antwort und einige nette Möglichkeiten zum Senden und Validieren von Params. Leider wurde mein Problem nicht gelöst, da ich immer noch das neue '$ pm'-Objekt mache, wenn index.php geladen wird. Das bedeutet, dass ich immer wieder die gleichen Posts zeige. – RaspberryJam

+0

Verstanden. Sie müssen Ihren Seitenparameter an Ihren $ this-> post_id = PostManager :: displayNPosts-Aufruf übergeben. Es wird immer die gleichen Beiträge erhalten, es sei denn, Sie senden einen Parameter. Sie erhalten den Parameter page_id, verwenden ihn jedoch nur für Navigationslinks. Wie funktioniert Ihre displayNPosts-Funktion? Ich denke, der erste Parameter -10- ist Limit und der zweite Parameter ist Offset. Sie müssen also Ihre Seitenzahl mit 10 multiplizieren und als zweiten Parameter verwenden. –

Verwandte Themen