2016-05-31 7 views
0

Mein aktueller Paginierung Code sieht wie folgt ausWie richtet man die Paginierungs-URL ein, um URL-Rewriting mit htaccess verwenden zu können?

//what page are we currently on 
if(!isset($_GET['page'])){ 
    $page=1; 
    } 
    else { 
     $page=(int)$_GET['page']; 
    } 
//select how many records to show per page 
$limit=10; 
//count how many rows 
$total=$conn->query("SELECT COUNT(*) FROM pagi")->fetchColumn(); 
//how many pages will be there 
$pages=ceil($total/$limit); 
if($page<1){ 
    $page=1;//forcing page to be 1 if it is less then 1 
    } 
else if($page>$pages){ 
    $page=$pages; 
    } 
//calculate the offset 
$offset=($page-1)*$limit; 
//fetch the result from database 
$sql=$conn->prepare("SELECT * FROM pagi ORDER BY pg_id LIMIT {$limit} OFFSET {$offset}"); 
$sql->execute(); 
if($sql->rowCount()>0){ 
while($result=$sql->fetch(PDO::FETCH_ASSOC)){; 
echo $result['pg_name'],"<br />"; 
} 
echo "<hr>"; 
}else { 
    echo "no result to fetch"; 
} 

$prev=$page-1; 
$next=$page+1; 
$previous=""; 
$nextr=""; 
if($page>1){ 
$previous='<li><a href="?page='.$prev.'">«</a></span>'; 
} 
//for($i=1;$i<=$pages;$i++){ 
// echo'<a href="?page='.$i.'">'.$i.'</a>'; 
// } 
if($page<$pages){ 
$nextr='<li><a href="?page='.$next.'">»</a></span>'; 
} 
$numbers=""; 
for($i = max(1, $page - 5); $i <= min($page + 5, $pages); $i++){ 
    if($i==$page){ 
    $numbers.='<li><a class="active" href="?page='.$i.'">'.$i.'</a></span></li>'; 
    } 
    else { 
     $numbers.='<li><a href="?page='.$i.'">'.$i.'</a></span></li>'; 
    } 
    } 

Und sehen meine aktuelle URL wie diese: - localhost/test/pagi.php?page=1

I want it to belocalhost/test/pagi.php/page/1

Ich habe folgende in meinem .htaccess

RewriteEngine on RewriteRule ^page/([a-zA-Z0-9-/]+)$ pagi.php?page=$1

Wie kann ich meine Seitennumerierung ändern, um mit der obigen Umschreibregel oder anderen Regeln zu arbeiten? Ich möchte in der Lage sein zu erreichen, wenn ein Benutzer klicken Sie auf der nächsten es sie pagi.php/page/123 nicht pagi.php?page=1 umleiten sollte .Ich ziemlich neu bin auf PHP und kann nicht einen Weg finden, um this.Any Hilfe zu tun, würde

Antwort

1

Sie zunächst eine neue Art und Weise müssen die Seitenzahl zu bekommen, da $_GET nicht mehr mit semantischen Urls arbeiten. So etwas wie das:

// find the page number, or default to page 1 
$page = 1; 
$path = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); 
if (is_array($path) && !empty($path)) { 
    if ($key = array_search('page', $path)) { 
     $page = (int)$path[$key + 1]; 
    } 
} 

Wie für die Seitenumbruch, können Sie einfach das in eine Funktion umbrechen. Die folgende Funktion, zum Beispiel geht davon aus, dass die Seite immer ganz am Ende der URL angegeben werden:

// draws a menu for navigating multiple pages of dynamic content 
function paginate($page, $display, $total) { 
    $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
    if ($path != '/') { 
     $path = rtrim($path, '/'); 
     if (stristr($path, 'page/')) { 
      $path = rtrim($path, '0..9'); 
      $query = ''; 
     } else { 
      $query = $path . '/page/'; 
     } 
    } else { 
     $query = 'page/'; 
    } 

    // create navigation links 
    $pages = $total <= $display ? 1 : ceil($total/$display); 
    $first = '<a href="' . $path . $query. '1">first</a>'; 
    $prev = '<a href="' . $path . $query . ($page - 1) . '">prev</a>'; 
    $next = '<a href="' . $path . $query . ($page + 1) . '">next</a>'; 
    $last = '<a href="' . $path . $query . $pages . '">last</a>'; 

    echo ($page > 1) ? "$first &#171; $prev &#171;" : 'first &#171; prev &#171;'; 
    echo ' (page ' . $page . ' of ' . $pages . ') '; 
    echo ($page < $pages) ? "&#187; $next &#187; $last" : '&#187; next &#187; last'; 
} 

Basierend auf dem Beispiel-Code, sollte es so etwas wie dies am Ende aussehen:

// find the page number, or default to page 1 
// ... 

//select how many records to show per page 
$limit = 10; 

//count how many rows 
$total = $conn->query("SELECT COUNT(*) FROM pagi")->fetchColumn(); 

if ($total > 0) { 
    $start = $limit * $page - $limit; 
    $sql = $conn->prepare("SELECT * FROM pagi ORDER BY pg_id LIMIT :start, :limit"); 
    $sql->bindValue(':start', $start, PDO::PARAM_INT); 
    $sql->bindValue(':limit', $limit, PDO::PARAM_INT); 
    $sql->execute(); 
    if ($sql->rowCount() > 0) { 
     while ($result = $sql->fetch(PDO::FETCH_ASSOC)) { 
      echo $result['pg_name'],"<br />"; 
     } 
     echo "<hr>"; 
     paginate($page, $limit, $total); 
    } 
} else { 
    echo "no result to fetch"; 
} 

Ich war nicht ganz sicher, was Sie mit $offset gemacht haben, also änderte ich dieses Bit. Wie auch immer, dies sollte Ihnen hoffentlich in die richtige Richtung weisen.

0

Die groß sein Problem ist nicht Ihr PHP, sondern die .htaccess-Datei. Wenn Sie in der URL pagi.php wollen, müssen Sie die RewriteRule ändern:

RewriteRule ^/test/pagi.php/page/([a-zA-Z0-9-/]+)$ /test/pagi.php?page=$1 
+0

Ich habe es gerade versucht, aber es ändert nicht meine URL von '/test/pagi.php? Page = 1' zu'/test/pagi.php/page/1' –

+0

Diese Transformation wird anders herum funktionieren , Ändern von '/ test/pagi.php/page/1' zu' /test/pagi.php? page = 1'. Ist Ihr Apache mit dem Modul mod_rewrite eingerichtet? – macl

+0

Ja, mein Apache ist mit dem Modul mod_rewrite eingerichtet –

Verwandte Themen