Jump to content

Recommended Posts

I have this RSS parsing code and it paginates , but only uses next and previous links instead of how google does it. I want it to read like this: first 1 2 3.... last

 

<?php
require_once('simplepie.inc');

// Set your own configuration options as you see fit.
$feed = new SimplePie();
$feed->set_feed_url(array(
'http://feeds2.feedburner.com/MishsGlobalEconomicTrendAnalysis',
'http://feeds.feedburner.com/TheBigPicture',
'http://feeds2.feedburner.com/ChartsAndCoffee',
        'http://feeds.feedburner.com/typepad/tradeblogs/the_slope_of_hope_with_ti',
));
$success = $feed->init();



// Make sure the page is being served with the right headers.
$feed->handle_content_type();

// Set our paging values
$start = (isset($_GET['start']) && !empty($_GET['start'])) ? $_GET['start'] : 0; // Where do we start?
$length = (isset($_GET['length']) && !empty($_GET['length'])) ? $_GET['length'] : 5; // How many per page?
$max = $feed->get_item_quantity(); // Where do we end?

// When we end our PHP block, we want to make sure our DOCTYPE is on the top line to make 
// sure that the browser snaps into Standards Mode.
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>SimplePie: Demo</title>

<link rel="stylesheet" href="styles.css" type="text/css" media="screen, projector" />

</head>

<body>
<div id="site">
<?php
// If we have an error, display it.
if ($feed->error())
{
	echo '<div class="sp_errors">' . "\r\n";
	echo '<p>' . htmlspecialchars($feed->error()) . "</p>\r\n";
	echo '</div>' . "\r\n";
}
?>

<?php if ($success): ?>
	<?php
	// get_items() will accept values from above.
	foreach($feed->get_items($start, $length) as $item):
		$feed = $item->get_feed();
	?>

		<div class="chunk">

			<h4><?php if ($item->get_permalink()) echo '<a href="' . $item->get_permalink() . '">'; echo $item->get_title(true); if ($item->get_permalink()) echo '</a>'; ?></h4>

			<p class="footnote">Source: <a href="<?php echo $feed->get_permalink(); ?>"><?php echo $feed->get_title(); ?></a> | <?putenv("TZ=US/Pacific"); echo $item->get_date('j M Y | g:i a'); ?></p>

		</div>

	<?php endforeach; ?>
<?php endif; ?>

<?php
// Let's do our paging controls
$next = (int) $start + (int) $length;
$prev = (int) $start - (int) $length;

// Create the NEXT link
$nextlink = '<a href="?start=' . $next . '&length=' . $length . '">Next »</a>';
if ($next > $max)
{
	$nextlink = 'Next »';
}

// Create the PREVIOUS link
$prevlink = '<a href="?start=' . $prev . '&length=' . $length . '">« Previous</a>';
if ($prev < 0 && (int) $start > 0)
{
	$prevlink = '<a href="?start=0&length=' . $length . '">« Previous</a>';
}
else if ($prev < 0)
{
	$prevlink = '« Previous';
}

// Normalize the numbering for humans
$begin = (int) $start + 1;
$end = ($next > $max) ? $max : $next;
?>

<p>Showing <?php echo $begin; ?>–<?php echo $end; ?> out of <?php echo $max; ?> | <?php echo $prevlink; ?> | <?php echo $nextlink; ?> | <a href="<?php echo '?start=' . $start . '&length=5'; ?>">5</a>, <a href="<?php echo '?start=' . $start . '&length=10'; ?>">10</a>, or <a href="<?php echo '?start=' . $start . '&length=20'; ?>">20</a> at a time.</p>
</div>

</body>
</html>

I read the tutorial http://www.phpfreaks.com/tutorial/basic-pagination

 

do how do I break the results such that it resembles google?

 

I'm sure it involves something like this: I tried pasting it into my original code but it made no difference

 

******  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']}?currentpage=1'><<</a> ";
   // get previous page num
   $prevpage = $currentpage - 1;
   // show < link to go back to 1 page
   echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$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']}?currentpage=$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']}?currentpage=$nextpage'>></a> ";
   // echo forward link for lastpage
   echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";
} // end if
/****** end build pagination links ******/

It should be easy to set up pagination.

 

I'll give you quick how to, and you can attempt it.

 

First, define how many results per page you want, then from a GET variable, get what page you are on. Assuming you have your array of results somewhere, loop through them from array number currentpage*resultsperpage, to (currentpage*resultsperpage)+50, then display that.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.