<?php
/*
*******************************************************
advanced_page_iterator.php
Advanced example of using the PHP class PageIterator
*******************************************************
*/
// Include the PageIterator file
$includeFolder = './';
require_once $includeFolder . 'PageIterator.inc';
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n";
?>
<!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" lang="en">
<head>
<title>Advanced PageIterator Example</title>
<meta name="author" id="author" content="Karsten Juul Mikkelsen" />
<meta name="description" id="description" content="Advanced example of using the PHP class PageIterator" />
<style type="text/css">
body {
background-color : #f7fffe;
color : #000000;
font-family : Tahoma;
}
caption {
font-weight : bold;
font-size : larger;
}
.listlabel {
font-weight : bold;
text-align : right;
}
.textmarker {
background-color : #ffffcc;
color : #000000;
}
.formstyle {
background-color : #cccccc;
border-style : solid;
border-width : 2;
border-top-color : #ebebeb;
border-left-color : #ebebeb;
border-bottom-color : #999999;
border-right-color : #999999;
font-size : x-small;
}
.formlabel {
color : #185EA0;
background-color : #cccccc;
text-align : right;
font-weight : bold;
font-size : x-small;
}
.formobject {
color : #000000;
background-color : #ffffef;
}
.accesskey {
text-decoration : underline;
}
</style>
</head>
<body>
<h1>Advanced PageIterator Example</h1>
<?php
// Create an array of circle dimensions to use as data
$circles = array();
for ($i = 0; $i < 100; $i++) {
$circles[$i]['radius'] = ($i + 1) * 2;
$circles[$i]['diameter'] = $circles[$i]['radius'] * 2;
$circles[$i]['perimeter'] = number_format($circles[$i]['diameter'] * pi(), 2);
$circles[$i]['area'] = number_format(($circles[$i]['radius'] * $circles[$i]['radius']) * pi(), 2);
}
// Set global variables if not already set
if (empty($nextAction)) $nextAction = 'listCircles';
if (empty($pageNo)) $pageNo = 1;
if (empty($perPage)) $perPage = 10;
if (empty($pageLinks)) $pageLinks = '';
if (empty($circle)) $circle = 0;
/*
*******************************************************
This script creates two different pages
- one for browsing a list of circle dimensions
- one for viewing the dimensions a chosen circle
*******************************************************
*/
?>
<?php if($nextAction == 'viewCircle') : ?>
<h2>Viewing a circle</h2>
<?php
/*
*******************************************************
View a circle
*******************************************************
*/
echo '<p>';
echo 'You have chosen circle No. ' . ($circle + 1) . '. ';
echo "In the "real" cyberworld this page would probably allow you to edit the circle and/or display it as an image.<br />\r\n";
echo "Here you can set options for the list of circles and return to it.\r\n";
echo "</p>\r\n";
echo '<table cellspacing="10" cellpadding="20">' . "\r\n";
echo '<tr valign="top">' . "\r\n";
echo '<td>' . "\r\n";
// Circle details
echo '<table cellspacing="0" cellpadding="5">' . "\r\n";
echo ' <caption>Circle #' . ($circle + 1) . '</caption>' . "\r\n";
echo ' <tr>' . "\r\n";
echo ' <td class="listlabel">' . "\r\n";
echo ' Radius:';
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $circles[$circle]['radius'];
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo ' <tr>' . "\r\n";
echo ' <td class="listlabel">' . "\r\n";
echo ' Diameter:';
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $circles[$circle]['diameter'];
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo ' <tr>' . "\r\n";
echo ' <td class="listlabel">' . "\r\n";
echo ' Perimeter:';
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $circles[$circle]['perimeter'];
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo ' <tr>' . "\r\n";
echo ' <td class="listlabel">' . "\r\n";
echo ' Area:';
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $circles[$circle]['area'];
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo '</table>' . "\r\n";
echo '</td>' . "\r\n";
echo '<td>' . "\r\n";
// Options form
assert(is_numeric($circle));
assert(is_numeric($perPage));
if (!$pageLinks) $pageLinks = '';
else assert(is_numeric($pageLinks) and $pageLinks >= 3);
echo '<form action="' . basename($PHP_SELF) . '">' . "\r\n";
echo ' <table class="formstyle" cellpadding="5">' . "\r\n";
echo ' <tr>' . "\r\n";
// Circle drop-down box
echo ' <td class="formlabel">' . "\r\n";
echo ' <label for="circle" accesskey="P">Show <span class="accesskey">p</span>age containing circle</label>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' <select name="circle" id="circle" class="formobject" size="1">' . "\r\n";
$j = sizeof($circles);
for ($i = 0; $i < $j; $i++) {
echo ' <option value="' . $i . '"';
if ($circle == $i) {
echo ' selected="selected"';
}
echo '>#' . ($i + 1) . '</option>'. "\r\n";
}
echo ' </select>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo ' <tr>' . "\r\n";
// Per page drop-down box
echo ' <td class="formlabel">' . "\r\n";
echo ' <label for="perPage" accesskey="C">Maximum number of <span class="accesskey">c</span>ircles per page</label>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' <select name="perPage" id="perPage" class="formobject" size="1">' . "\r\n";
$ppOptions = array(
array('value' => sizeof($circles), 'option' => '<All>'),
array('value' => '5', 'option' => '5'),
array('value' => '10', 'option' => '10'),
array('value' => '25', 'option' => '25'),
array('value' => '50', 'option' => '50')
);
$j = sizeof($ppOptions);
for ($i = 0; $i < $j; $i++) {
echo ' <option value="' . $ppOptions[$i]['value'] . '"';
if ($perPage == $ppOptions[$i]['value']) {
echo ' selected="selected"';
}
echo '>' . $ppOptions[$i]['option'] . '</option>'. "\r\n";
}
echo ' </select>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
// Page link drop-down box
echo ' <tr>' . "\r\n";
echo ' <td class="formlabel">' . "\r\n";
echo ' <label for="pageLinks" accesskey="L">Maximum number of page <span class="accesskey">l</span>inks</label>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' <select name="pageLinks" id="pageLinks" class="formobject" size="1">' . "\r\n";
$linkOptions = array(
array('value' => '', 'option' => '<All>'),
array('value' => '3', 'option' => '3'),
array('value' => '5', 'option' => '5'),
array('value' => '10', 'option' => '10'),
array('value' => '15', 'option' => '15')
);
$j = sizeof($linkOptions);
for ($i = 0; $i < $j; $i++) {
echo ' <option value="' . $linkOptions[$i]['value'] . '"';
if ($pageLinks == $linkOptions[$i]['value']) {
echo ' selected="selected"';
}
echo '>' . $linkOptions[$i]['option'] . '</option>'. "\r\n";
}
echo ' </select>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
// Submit button and hidden field
echo ' <tr align="center">' . "\r\n";
echo ' <td colspan="2">' . "\r\n";
echo ' <input type="submit" value="Return to the list" />' . "\r\n";
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
echo ' </table>' . "\r\n";
echo ' <input type="hidden" name="nextAction" id="nextAction" value="listCircles" />' . "\r\n";
echo '</form>' . "\r\n";
echo '</td>' . "\r\n";
echo '</tr>' . "\r\n";
echo '</table>' . "\r\n";
?>
<?php else : ?>
<h2>List of circles</h2>
<?php
/*
*******************************************************
Viewing a list circles
*******************************************************
*/
// Create a PageIterator object for the specified page number or circle
if ($circle) {
$paginator = new PageIterator(sizeof($circles), $pageNo, $perPage, $pageLinks, $circle);
$pageNo = $paginator -> getCurrentPageNumber(); // $circle may cause $pageNo to change
}
else {
$paginator = new PageIterator(sizeof($circles), $pageNo, $perPage, $pageLinks);
}
echo "<p>\r\n";
// Explain what is being shown here
echo 'Page ' . $pageNo . ' of ' . $paginator -> getPageCount()
. '. Circles ' . ($paginator -> getFirstElementNumber() + 1) . ' to '
. ($paginator -> getLastElementNumber() + 1) . ' of ' . sizeof($circles) . ".<br /><br />\r\n";
// Print page links like << < [1] [2] [3] ... [n] > >>
if ($paginator -> getPageCount() > 1) {
if ($pageNo == 1) {
echo '<< < ';
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=1&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="First page"><<</a> ';
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . ($pageNo - 1) . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks
. '" target="_self" title="Previous page"><</a> ';
}
while ($paginator -> hasNextPage()) {
$ndx = $paginator -> nextPage();
if ($ndx == $pageNo) {
echo "$ndx ";
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . $ndx
. '&perPage=' . $perPage . '&pageLinks=' . $pageLinks
. '" target="_self" title="Page ' . $ndx . '">';
echo '[' . $ndx . ']</a> ';
}
}
if ($pageNo == $paginator -> getPageCount()) {
echo '> >> ';
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . ($pageNo + 1) . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="Next page">></a> ';
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . $paginator -> getPageCount() . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="Last page">>></a> ';
}
}
echo "</p>\r\n";
// Print a table of circles
echo '<table cellspacing="0" cellpadding="5">' . "\r\n";
echo ' <caption>Circle Dimensions</caption>' . "\r\n";
echo ' <tr>' . "\r\n";
echo ' <th>#</th>' . "\r\n";
echo ' <th>Radius</th>' . "\r\n";
echo ' <th>Diameter</th>' . "\r\n";
echo ' <th>Perimeter</th>' . "\r\n";
echo ' <th>Area</th>' . "\r\n";
echo ' </tr>' . "\r\n";
$trClass = '';
while ($paginator -> hasNextElement()) {
$ndx = $paginator -> nextElement();
if ($ndx % 2 == 0) {
$trClass = '';
}
else {
$trClass = ' class="textmarker"';
}
$hrefString = '<a href="' . basename($PHP_SELF) . '?nextAction=viewCircle'
. '&circle=' . $ndx
. '&perPage=' . $perPage
. '&pageLinks=' . $pageLinks
. '" target="_self" title="View circle #' . ($ndx + 1) . '">';
echo ' <tr align="right"' . $trClass . ">\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $hrefString;
echo ($ndx + 1) . '.';
echo '</a>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $hrefString;
echo $circles[$ndx]['radius'];
echo '</a>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $hrefString;
echo $circles[$ndx]['diameter'];
echo '</a>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $hrefString;
echo $circles[$ndx]['perimeter'];
echo '</a>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' <td>' . "\r\n";
echo ' ' . $hrefString;
echo $circles[$ndx]['area'];
echo '</a>' . "\r\n";
echo ' </td>' . "\r\n";
echo ' </tr>' . "\r\n";
} // while
echo '</table>' . "\r\n";
echo '<p>' . "\r\n";
// Print a new set of page links at the bottom of the page
if ($pageNo == 1) {
echo '<< < ';
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=1&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="First page"><<</a> ';
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . ($pageNo - 1) . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="Previous page"><</a> ';
}
$ndx = $paginator -> firstPage(); // Use firstPage() to reset the page pointer
if ($ndx == $pageNo) {
echo "$ndx ";
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . $ndx
. '&perPage=' . $perPage . '&pageLinks=' . $pageLinks
. '" target="_self" title="Page ' . $ndx . '">';
echo '[' . $ndx . ']</a> ';
}
while ($paginator -> hasNextPage()) {
$ndx = $paginator -> nextPage();
if ($ndx == $pageNo) {
echo "$ndx ";
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . $ndx
. '&perPage=' . $perPage . '&pageLinks=' . $pageLinks
. '" target="_self" title="Page ' . $ndx . '">';
echo '[' . $ndx . ']</a> ';
}
}
if ($pageNo == $paginator -> getPageCount()) {
echo '> >> ';
}
else {
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . ($pageNo + 1) . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="Next page">></a> ';
echo '<a href="' . basename($PHP_SELF) . '?pageNo=' . $paginator -> getPageCount() . '&perPage=' . $perPage . '&pageLinks=' . $pageLinks . '" target="_self" title="Last page">>></a> ';
}
echo '</p>' . "\r\n";
?>
<?php endif; ?>
</body>
</html>
|