2016-05-31 15 views
0

我當前的頁碼代碼如下所示如何設置分頁URL以便能夠使用htaccess重寫URL?

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

而我當前的URL看起來像這樣: - localhost/test/pagi.php?page=1

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

我有這個按照我的.htaccess

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

如何更改我的分頁以使用上面的重寫規則或可能是另一個規則;我希望能夠實現時,旁邊一個用戶點擊它應該重定向 他們pagi.php/page/123pagi.php?page=1。我非常新的PHP和不能想出一個辦法做到this.Any幫助將是巨大

回答

1

首先你需要一個新的方式來獲得的頁面數量,因爲$_GET將不再與語義網址。就像這樣:

// 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]; 
    } 
} 

至於分頁,你可以簡單地把它包裝到一個函數中。下面的函數,例如,假定該頁面將始終在URL的最後指定:

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

根據您的示例代碼,它最終應該看起來像這樣:

// 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"; 
} 

我不完全確定你在做什麼$offset所以我改變了這一點。無論哪種方式,這應該有希望指出你在正確的方向。

0

的問題不是你的PHP,而是.htaccess文件。如果你想在URL pagi.php,必須重寫規則更改爲:

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

剛剛嘗試過,但它不會將我的網址從'/test/pagi.php?page=1'改爲'/ test/pagi.php/page/1' –

+0

這個轉換可能會反過來,將'/ test/pagi.php/page/1'改爲'/test/pagi.php?page=1'。你的Apache設置了mod_rewrite模塊嗎? – macl

+0

是的我的apache設置了mod_rewrite模塊 –