[nycphp-talk] Problem with Pagination
Phillip Powell
phillip.powell at adnet-sys.com
Thu Jun 3 15:53:26 EDT 2004
Joe Crawford Jr. wrote:
>Phillip,
>
>what is all this stuff? is it auto inserted by an editor?
>
> /**
> * @abstract
> * @param mixed $section
> * @param int id (optional)
> */
>
>
>
>
Documentation code used by PHPDocumentor to create Javadoc like
documents for PHP. It's pretty cool.
Phil
>----- Original Message -----
>From: "Phillip Powell" <phillip.powell at adnet-sys.com>
>To: "NYPHP Talk" <talk at lists.nyphp.org>
>Sent: Thursday, June 03, 2004 3:29 PM
>Subject: Re: [nycphp-talk] Problem with Pagination
>
>
>
>
>>This is per Joe Crawford's request.
>>
>>Phil
>>
>>[PHP]
>>// CLASS FOR IMPLEMENTATION FOR VIEW CLASSES
>>class View {
>>
>> /**
>> * Abstract class for views
>> * @abstract
>> */
>> function View() {
>> // "CONSTRUCTOR"
>> // PREVENT INSTANTIATION OF THIS OBJECT TO ENSURE "ABSTRACT"
>>
>>
>STATUS
>
>
>> if (!is_subclass_of($this, 'View')) trigger_error('Class "' .
>>get_class($this) . '" is not a subclass of Object', E_USER_ERROR);
>> return null;
>> }
>>
>> //------------------------------ --* GETTER/SETTER METHODS *--
>>-----------------------------------------
>>
>> /**
>> * @abstract
>> * @param int id
>> * @param mixed $imageLocationPath (optional)
>> */
>> function getAssociationDisplay($id, $imageLocationPath = '') {}
>>
>> /**
>> * @abstract
>> * @param mixed $section
>> * @param int id (optional)
>> */
>> function getAssocSectionsArray($associatedSection, $id = '') {}
>>
>> /**
>> * @param object $result
>> * @return int total items in $result
>> */
>> function &getCount($result) {
>> return @sizeof($result);
>> }
>> //------------------------------ --* END OF GETTER/SETTER METHODS
>>*-- -------------------------------
>>
>> /**
>> * @abstract
>> * @param int id (optional)
>> */
>> function assocSectionsDisplayHTML($id = '') {}
>>
>> /**
>> * @abstract
>> */
>> // DISPLAY HTML
>> function displayHTML() {}
>>
>> /**
>> * @abstract
>> */
>> // DISPLAY PAGE LINKS
>> function displayPage() {}
>>
>> /**
>> * @abstract
>> */
>> // DISPLAY TEXT
>> function displayText() {}
>>
>> /**
>> * @abstract
>> */
>> // DISPLAY TREE
>> function displayTree() {}
>>
>> /**
>> * @abstract
>> */
>> // DISPLAY XML
>> function displayXML() {}
>>
>> // MORE TO COME...
>>
>>}
>>
>>/**
>> * PaginationView will handle all displays regarding pagination along
>>with limit calculations. Class is a subclass of client-scope
>> * class View for displayPage() method inheritance
>> *
>> * @author Phil Powell
>> * @version 1.0.0
>> * @package IMAGE_CATALOG
>> * @see View
>> */
>>
>>class PaginationView extends View {
>>
>> /**
>> *
>> * Result set
>> *
>> * @access private
>> * @param object $result
>> */
>> var $result;
>>
>> /**
>> * Constructor
>> *
>> * @access public
>> */
>> function PaginationView($result) { // CONSTRUCTOR
>> $this->result = $result;
>> }
>>
>> //--------------------------------------- --* GETTER/SETTER METHODS
>>*-- -----------------------------------------------------------------
>>
>> /**
>> * Retrieve "cached" results from $_SESSION variable
>> *
>> * @access protected
>> * @return object $result unserialized collection array
>> */
>> function &getCachedResult() { // STATIC
>>OBJECT METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>$willKeepPageSession) return unserialize($_SESSION['result']);
>> }
>> //--------------------------------------- --* END OF GETTER/SETTER
>>METHODS *--
>>-----------------------------------------------------------------
>>
>> /**
>> * Do a "faux" caching by placing the entire resultset into a
>>$_SESSION variable. Serialize as this might be an array of objects
>> *
>> * @access protected
>> */
>> function cacheResult() { // VOID METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>!$willKeepPageSession && !$page) {
>> unset($_SESSION['result']);
>> $_SESSION['result'] = serialize($this->result);
>> flush();
>> ob_flush();
>> clearstatcache();
>> }
>> }
>>
>> /**
>> * Display pagination links
>> *
>> * @access public
>> * @return mixed HTML
>> */
>> function &displayPage() { // STATIC HTML
>>STRING METHOD
>> global $section, $action, $album, $headerMenuArray,
>>$willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>>
>> $qs =
>>"section=$section&action=$action&sort=$sort&chooseAlbum=1&album=" .
>>urlencode($album) . '&willKeepPageSession=1'; // FOR EASE OF WRITE
>>
>> if ((int)$page === 0) $page = 1;
>> $page = (int)$page; // CONVERT TO INTEGER
>>
>> if (@sizeof($this->result) > $displayItemLimit &&
>>$willPaginate) {
>>
>> $html .= "<div align=\"center\">\n";
>>
>> // PREVIOUS LINK
>> if ((int)$page !== 1) {
>> $pagePrev = $page - 1;
>> $html .= " <a href=\"index.php?$qs&page=$pagePrev\">Previous
>>$displayItemLimit ${section}s in \"$album\"</a> <b>|</b> ";
>> }
>>
>> $numPages = (int)(@sizeof($this->result) /
>>
>>
>$displayItemLimit);
>
>
>> // ALL PAGES (PAGE NUMBER) LINK(S) EXCEPT FOR LAST PAGE
>> for ($i = 1; $i <= $numPages; $i++) {
>> if ((int)$i === (int)$page) $html .= "$i "; else $html .=
>>
>>
>
>
>
>>"<a href=\"index.php?$qs&page=$i\">$i</a> ";
>> if ($i <= $numPages && @sizeof($this->result) %
>>(int)$displayItemLimit !== $numPages) $html .= '<b>|</b> ';
>> }
>>
>> // LAST PAGE NUMBER LINK
>> if (@sizeof($this->result) % $displayItemLimit != 0) {
>> if ((int)$i === (int)$page) $html .= "$i "; else $html
>>.= "<a href=\"index.php?$qs&page=$i\">$i</a> ";
>> }
>>
>> // NEXT LINK
>> $pageItemCount = (int)(@sizeof($this->result) - ($page *
>>$displayItemLimit));
>> if ($page <= $numPages && (int)$pageItemCount > 0) {
>> $pageNext = $page + 1;
>> $html .= "<b>|</b> <a
>>href=\"index.php?$qs&page=$pageNext\">Next ";
>> $html .= ($pageItemCount < $displayItemLimit) ? $pageItemCount
>>: $displayItemLimit;
>> $html .= " ${section}s in \"$album\"</a>";
>> }
>>
>> $html .= "\n</div>\n";
>> }
>> return $html;
>> }
>>
>> /**
>> * Perform "cache flush" by destroying the session variable
>>containing the $result
>> *
>> * @access protected
>> */
>> function &flushResult() { // STATIC VOID METHOD
>> if ($_SESSION['result']) unset($_SESSION['result']);
>> flush();
>> ob_flush();
>> clearstatcache();
>> }
>>
>> /**
>> * Will perform specific array_slice() function on parameter $result
>>(IMPORTANT! DO NOT USE $this->result WILL AFFECT PAGINATION!)
>> *
>> * @access protected
>> * @param object $result (reference)
>> */
>> function &limitResult(&$result) { // STATIC VOID METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_GET as $key => $val) if (!isset(${$key})) ${$key} =
>>
>>
>$val;
>
>
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>is_array($result) && @sizeof($result) >= $displayItemLimit) {
>> // CALCULATE $offset AND $limit
>> if ((int)$page === 0) $page = 1;
>> $page--;
>> $offset = (int)$page * (int)$displayItemLimit;
>> $length = ($offset + (int)$displayItemLimit > @sizeof($result))
>>? $offset : (int)$displayItemLimit;
>> $result = array_slice($result, $offset, $length);
>> }
>> }
>>
>>}
>>[/PHP]
>>
>>This is per Joe Crawford's request/**
>> * PaginationView will handle all displays regarding pagination along
>>with limit calculations. Class is a subclass of client-scope
>> * class View for displayPage() method inheritance
>> *
>> * @author Phil Powell
>> * @version 1.0.0
>> * @package IMAGE_CATALOG
>> * @see View
>> */
>>
>>class PaginationView extends View {
>>
>> /**
>> *
>> * Result set
>> *
>> * @access private
>> * @param object $result
>> */
>> var $result;
>>
>> /**
>> * Constructor
>> *
>> * @access public
>> */
>> function PaginationView($result) { // CONSTRUCTOR
>> $this->result = $result;
>> }
>>
>> //--------------------------------------- --* GETTER/SETTER METHODS
>>*-- -----------------------------------------------------------------
>>
>> /**
>> * Retrieve "cached" results from $_SESSION variable
>> *
>> * @access protected
>> * @return object $result unserialized collection array
>> */
>> function &getCachedResult() { // STATIC
>>OBJECT METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>$willKeepPageSession) return unserialize($_SESSION['result']);
>> }
>> //--------------------------------------- --* END OF GETTER/SETTER
>>METHODS *--
>>-----------------------------------------------------------------
>>
>> /**
>> * Do a "faux" caching by placing the entire resultset into a
>>$_SESSION variable. Serialize as this might be an array of objects
>> *
>> * @access protected
>> */
>> function cacheResult() { // VOID METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>!$willKeepPageSession && !$page) {
>> unset($_SESSION['result']);
>> $_SESSION['result'] = serialize($this->result);
>> flush();
>> ob_flush();
>> clearstatcache();
>> }
>> }
>>
>> /**
>> * Display pagination links
>> *
>> * @access public
>> * @return mixed HTML
>> */
>> function &displayPage() { // STATIC HTML
>>STRING METHOD
>> global $section, $action, $album, $headerMenuArray,
>>$willPaginate, $displayItemLimit;
>> foreach ($_REQUEST as $key => $val) if (!isset(${$key})) ${$key}
>>= $val;
>>
>> $qs =
>>"section=$section&action=$action&sort=$sort&chooseAlbum=1&album=" .
>>urlencode($album) . '&willKeepPageSession=1'; // FOR EASE OF WRITE
>>
>> if ((int)$page === 0) $page = 1;
>> $page = (int)$page; // CONVERT TO INTEGER
>>
>> if (@sizeof($this->result) > $displayItemLimit &&
>>$willPaginate) {
>>
>> $html .= "<div align=\"center\">\n";
>>
>> // PREVIOUS LINK
>> if ((int)$page !== 1) {
>> $pagePrev = $page - 1;
>> $html .= " <a href=\"index.php?$qs&page=$pagePrev\">Previous
>>$displayItemLimit ${section}s in \"$album\"</a> <b>|</b> ";
>> }
>>
>> $numPages = (int)(@sizeof($this->result) /
>>
>>
>$displayItemLimit);
>
>
>> // ALL PAGES (PAGE NUMBER) LINK(S) EXCEPT FOR LAST PAGE
>> for ($i = 1; $i <= $numPages; $i++) {
>> print_r("i = $i<br>");
>> if ((int)$i === (int)$page) $html .= "$i "; else $html .=
>>"<a href=\"index.php?$qs&page=$i\">$i</a> ";
>> if ($i <= $numPages && @sizeof($this->result) %
>>(int)$displayItemLimit !== $numPages) $html .= '<b>|</b> ';
>> }
>>
>> // LAST PAGE NUMBER LINK
>> if (@sizeof($this->result) % $displayItemLimit != 0) {
>> if ((int)$i === (int)$page) $html .= "$i "; else $html
>>.= "<a href=\"index.php?$qs&page=$i\">$i</a> ";
>> }
>>
>> // NEXT LINK
>> $pageItemCount = (int)(@sizeof($this->result) - ($page *
>>$displayItemLimit));
>> if ($page <= $numPages && (int)$pageItemCount > 0) {
>> $pageNext = $page + 1;
>> $html .= "<b>|</b> <a
>>href=\"index.php?$qs&page=$pageNext\">Next ";
>> $html .= ($pageItemCount < $displayItemLimit) ? $pageItemCount
>>: $displayItemLimit;
>> $html .= " ${section}s in \"$album\"</a>";
>> }
>>
>> $html .= "\n</div>\n";
>> }
>> return $html;
>> }
>>
>> /**
>> * Perform "cache flush" by destroying the session variable
>>containing the $result
>> *
>> * @access protected
>> */
>> function &flushResult() { // STATIC VOID METHOD
>> if ($_SESSION['result']) unset($_SESSION['result']);
>> flush();
>> ob_flush();
>> clearstatcache();
>> }
>>
>> /**
>> * Will perform specific array_slice() function on parameter $result
>>(IMPORTANT! DO NOT USE $this->result WILL AFFECT PAGINATION!)
>> *
>> * @access protected
>> * @param object $result (reference)
>> */
>> function &limitResult(&$result) { // STATIC VOID METHOD
>> global $willPaginate, $displayItemLimit;
>> foreach ($_GET as $key => $val) if (!isset(${$key})) ${$key} =
>>
>>
>$val;
>
>
>> if ($willPaginate && (int)$displayItemLimit > 0 &&
>>is_array($result) && @sizeof($result) >= $displayItemLimit) {
>> // CALCULATE $offset AND $limit
>> if ((int)$page === 0) $page = 1;
>> $page--;
>> $offset = (int)$page * (int)$displayItemLimit;
>> $length = ($offset + (int)$displayItemLimit > @sizeof($result))
>>? $offset : (int)$displayItemLimit;
>> $result = array_slice($result, $offset, $length);
>> }
>> }
>>
>>}
>>[/PHP]
>>_______________________________________________
>>talk mailing list
>>talk at lists.nyphp.org
>>http://lists.nyphp.org/mailman/listinfo/talk
>>
>>
>>
>>
>
>_______________________________________________
>talk mailing list
>talk at lists.nyphp.org
>http://lists.nyphp.org/mailman/listinfo/talk
>
>
>
--
---------------------------------------------------------------------------------
Phil Powell
Multimedia Programmer
BPX Technologies, Inc.
#: (703) 709-7218 x107
Fax: (703) 709-7219
More information about the talk
mailing list