Go Back   CodingForums.com > :: Server side development > PHP

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 02-13-2009, 10:25 PM   PM User | #1
new4you
New to the CF scene

 
Join Date: Feb 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
new4you is an unknown quantity at this point
PHP Pagination and Mod_Rewrite

HI there guys,

Hoping someone can please help - been working on this for 2 days now with no luch ....

I've managed to implement a Rewrite on my website where the URL that I'm specifying is static. ie.

My old link was:
http://www.mysite/Fonts.php?ID=1
I implemented:
RewriteRule my-fonts-(.*)\.htm$ Fonts.php?ID=$1
This gave me the SEO friendly of:
http://www.mysite/my-fonts-A.htm

Great !!!!

But now I need to do something similar (ie. SEO friendly links) with the PHP Pagination script that I've implemented.


<?php
// database connection info
$conn = mysql_connect('localhost','db_un','pw') or trigger_error("SQL", E_USER_ERROR);
$db = mysql_select_db('db',$conn) or trigger_error("SQL", E_USER_ERROR);

// find out how many rows are in the table
$sql = "SELECT COUNT(*) FROM fonts WHERE Letter = '1'";
$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);
$r = mysql_fetch_row($result);
$numrows = $r[0];

// number of rows to show per page
$rowsperpage = 10;
// find out total pages
$totalpages = ceil($numrows / $rowsperpage);

// get the current page or set a default
if (isset($_GET['page']) && is_numeric($_GET['page'])) {
// cast var as int
$currentpage = (int) $_GET['page'];
} else {
// default page num
$currentpage = 1;
} // end if

// if current page is greater than total pages...
if ($currentpage > $totalpages) {
// set current page to last page
$currentpage = $totalpages;
} // end if
// if current page is less than first page...
if ($currentpage < 1) {
// set current page to first page
$currentpage = 1;
} // end if

// the offset of the list, based on current page
$offset = ($currentpage - 1) * $rowsperpage;



$ID = $_GET['ID'];

// get the info from the db
$sql = "SELECT * FROM fonts WHERE Letter = '$ID' LIMIT $offset, $rowsperpage";
$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);

// while there are rows to be fetched...
while ($list = mysql_fetch_assoc($result)) {
// echo data
echo $list['UniqueID'] . " : " . $list['Name'] . "<br />";
} // end while

/****** build the pagination links ******/
// range of num links to show
$range = 3;

// if not on page 1, don't show back links
if ($currentpage > 1) {
// show << link to go back to page 1
echo " <a href='{$_SERVER['PHP_SELF']}?ID=$ID&page=1'><<</a> ";
// get previous page num
$prevpage = $currentpage - 1;
// show < link to go back to 1 page
echo " <a href='{$_SERVER['PHP_SELF']}?ID=$ID&page=$prevpage'><</a> ";
} // end if

// loop to show links to range of pages around current page
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {
// if it's a valid page number...
if (($x > 0) && ($x <= $totalpages)) {
// if we're on current page...
if ($x == $currentpage) {
// 'highlight' it but don't make a link
echo " [<b>$x</b>] ";
// if not current page...
} else {
// make it a link
echo " <a href='{$_SERVER['PHP_SELF']}?ID=$ID&page=$x'>$x</a> ";
} // end else
} // end if
} // end for

// if not on last page, show forward and last page links
if ($currentpage != $totalpages) {
// get next page
$nextpage = $currentpage + 1;
// echo forward link for next page
echo " <a href='{$_SERVER['PHP_SELF']}?ID=$ID&page=$nextpage'>></a> ";
// echo forward link for lastpage
echo " <a href='{$_SERVER['PHP_SELF']}?ID=$ID&page=$totalpages'>>></a> ";
} // end if
/****** end build pagination links ******/
?>


I think my question is ....

Q: How should the Pagination links be modified (Next, Last, Numbers etc) so that I can use them in a Mod_Rewrite ...
Q2: what is the code for the Mod_Rewrite to go in the htaccess file. ...

Ideally I want to output something like:

http://www.mysite/my-fonts-A-page1.htm
http://www.mysite/my-fonts-A-page2.htm
http://www.mysite/my-fonts-A-page3.htm
etc.

Thank you in advance !!!

new4you is offline   Reply With Quote
Old 02-13-2009, 11:01 PM   PM User | #2
CyberPirate
Regular Coder

 
Join Date: Jan 2009
Location: Norway
Posts: 118
Thanks: 8
Thanked 2 Times in 2 Posts
CyberPirate is an unknown quantity at this point
This rule should work:
Code:
RewriteRule my-fonts-(.*)/page/([0-9]*).htm$ Fonts.php?ID=$1&page=$2
Now the link would be:
Code:
http://www.mysite/my-fonts-A/page/3.htm
CyberPirate is offline   Reply With Quote
Old 02-14-2009, 02:35 AM   PM User | #3
new4you
New to the CF scene

 
Join Date: Feb 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
new4you is an unknown quantity at this point
Thumbs up

Cheers... thanks for the help!

Much appreciated.

Jay

Last edited by new4you; 02-15-2009 at 12:53 PM..
new4you is offline   Reply With Quote
Old 02-14-2009, 03:27 AM   PM User | #4
kokjj87
Regular Coder

 
kokjj87's Avatar
 
Join Date: Sep 2008
Location: Singapore
Posts: 279
Thanks: 1
Thanked 55 Times in 54 Posts
kokjj87 is on a distinguished road
You need to change all your link manually, the server is not that smart to convert all links in your page to the rewrite version.
kokjj87 is offline   Reply With Quote
Reply

Bookmarks

Tags
mod_rewrite, pagination, php

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 12:32 AM.


Advertisement
Log in to turn off these ads.