2016-05-31 12 views
0

私の現在の改ページコードは、このhtaccessを使用してURL書き換えを使用できるようにページング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/123にないpagi.php?page=1に にそれらをリダイレクトする必要があるときにユーザーがクリック次に私は素晴らしいことだ

答えて

1

$_GETはもはやセマンティックなURLでは動作しませんので、あなたはまず、ページ番号を取得するための新しい方法が必要になります。このようなもの:

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

ページングについては、単純に関数にラップすることができます。

// 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"; 
} 
:あなたのコード例に基づいて

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

、それはこのような何かを探して終わる必要があります。次の関数は、例えば、ページは常に、URLの最後に指定されていることを前提としてい

$offsetで何をやっているのか完全にはわからなかったので、そのビットを変更しました。いずれにせよ、これはうまくいけばあなたを正しい方向に向けるはずです。

0

.Iは、PHPにかなり新しいですとthis.Any助けを行う方法を見つけ出すカント達成することができるようにしたいです問題はあなたのPHPではなく、.htaccessファイルです。あなたはURLでpagi.phpをしたい場合は、へのRewriteRuleを変更する必要があります。

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 'に私のURLを変更していません –

+0

この変換は別の方法で動作します'/ test/pagi.php/page/1'を' /test/pagi.php?page = 1'に変更します。あなたのApacheはmod_rewriteモジュールで設定されていますか? – macl

+0

はい私のapacheはmod_rewriteモジュールで設定されています –

関連する問題