Example 5-11. Adding direct page access to browse( )
// (7a) Previous link code goes here // Output the page numbers as links // Count through the number of pages in the results for($x=0, $page=1; $x<$rowsFound; $x+=ROWS, $page++) // Is this the current page? if ($x < $rowOffset || $x > ($rowOffset + $numRowsToFetch - 1)) // No, so print out a link echo "<a href=\"" . $scriptName . "?offset=" . rawurlencode($x) . "&" . $browseString . "\">" . $page . "</a> "; else // Yes, so don't print a link echo $page . " "; // (7b) Next link code goes here
The page number code consists of a
for loop that works as follows:
The loop begins counting rows using the variable
$x-starting at row zero-and pages using
$page, starting on page one. The loop finishes when
$xis equal to the number of rows in the query result set.
In the body of the loop, if the row
$xisn't on the current page displayed in the HTML
<table>, an embedded link is output that is marked with the page number
$page. The link is to the script resource
$scriptName, with the parameters in
$browseStringand an offset of the current value of
$x. The current value of
$xis the first row on the page numbered
$page. Clicking on the link requests the script again and produces the results for
$pagethat begin with the row with an offset of
For example, if
$xis row 220, and the
$pageis 11, the embedded link output by the code fragment is:
<a href="example.5-11.php? offset=220&regionName=Margaret%20River">11</a>
$xis a row on the currently displayed page, the code outputs the page number without the embedded hypertext link.
The case study of a generic
browse( ) function is now complete. Additional features can be added, as discussed briefly in the next section.
What's Missing from the Previous and Next Browser
Features that aren't described here but could be incorporated in the
browse( ) function include:
Configurable colors for columns, headers, and links.
Configurable column alignment and fonts.
Other layouts, such as horizontal table-based layouts. See the winestore Hot New Wines panel as an example.
Embedding of links in the body of the
<table>so that other queries can be run by clicking on data in the
<table>. Our customized version for the winestore that is described in Chapter 13 supports this feature.
Spreadsheet-like features, such as the ability to click on a column heading to sort the data by that column.