Changeset 35225 for trunk/www


Ignore:
Timestamp:
Mar 21, 2008, 6:31:53 AM (12 years ago)
Author:
eridius@…
Message:

Auto-page any output of ports.php that exceeds the pagesize

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/ports.php

    r35224 r35225  
    113113        case 'all':
    114114            $criteria = '';
    115             $paging = true;
    116115            break;
    117116        default:
     
    121120        $where = ($criteria == '' ? '' : "WHERE $criteria");
    122121        $query = "SELECT DISTINCT $fields FROM $tables $where ORDER BY name";
    123         if ($paging) {
    124             $offset = $pagesize * ($page-1);
    125             $query .= " LIMIT $pagesize OFFSET $offset";
    126             # get the total count
    127             $countquery = "SELECT COUNT(*) FROM $tables $where ORDER By name";
    128             $result = mysql_query($countquery);
    129             $row = mysql_fetch_array($result); # only 1 row
    130             $totalcount = $row[0];
    131             $pagecount = ceil($totalcount / $pagesize);
    132             # generate a paging control and cache it so we can show it twice
    133             $pagecontrol = "<p>Page ";
    134             for ($i = 1; $i <= $pagecount; $i++) {
    135                 if ($i != 1) {
    136                     $pagecontrol .= " | ";
    137                 }
    138                 if ($i == $page) {
    139                     $pagecontrol .= "<b>$i</b>";
    140                 } else {
    141                     $pagecontrol .= "<a href=\"$_SERVER[PHP_SELF]?by=$by&amp;substr=$substr&amp;page=$i&amp;pagesize=$pagesize\">$i</a>";
    142                 }
    143             }
    144             $pagecontrol .= "</p>";
    145         }
    146122        $result = mysql_query($query);
    147123       
    148124        /* Main query sent to the DB */
    149125        if ($result) {
     126            $numrows = mysql_num_rows($result);
     127            if ($numrows > $pagesize) {
     128                $paging = true;
     129                $pagecount = ceil($numrows / $pagesize);
     130                $page = min($page, $pagecount);
     131                $offset = $pagesize * ($page-1);
     132                $curpagesize = min($pagesize, $numrows - $offset);
     133                # generate a paging control and cache it so we can show it twice
     134                $pagecontrol = "<p>Page ";
     135                for ($i = 1; $i <= $pagecount; $i++) {
     136                    if ($i != 1) {
     137                        $pagecontrol .= " | ";
     138                    }
     139                    if ($i == $page) {
     140                        $pagecontrol .= "<b>$i</b>";
     141                    } else {
     142                        $pagecontrol .= "<a href=\"$_SERVER[PHP_SELF]?by=$by&amp;substr=$substr&amp;page=$i&amp;pagesize=$pagesize\">$i</a>";
     143                    }
     144                }
     145                $pagecontrol .= "</p>";
     146
     147                # seek the data pointer
     148                mysql_data_seek($result, $offset);
     149            }
     150
    150151            print '<h3>Query Results</h3>';
    151             $resultrows = mysql_num_rows($result);
    152152            if ($paging) {
    153153                print $pagecontrol;
    154                 $numrows = ($offset+1) . "-" . ($offset + $resultrows) . " of $totalcount Portfile" . ($totalcount == 1 ? '' : 's');
     154                $numrowtext = ($offset+1) . "-" . ($offset + $curpagesize) . " of $numrows Portfile" . ($curpagesize == 1 ? '' : 's');
    155155            } else {
    156                 $numrows = "$resultrows Portfile" . ($resultrows == 1 ? '' : 's');
    157             }
    158             print "<p><i>$numrows Selected</i></p>";
     156                $numrowtext = "$numrows Portfile" . ($numrows == 1 ? '' : 's');
     157            }
     158            print "<p><i>$numrowtext Selected</i></p>";
    159159
    160160            print '<dl>';
    161161            /* Iterate over the entire set of returned ports */
    162             while ($row = mysql_fetch_assoc($result)) {
     162            for ($row = mysql_fetch_assoc($result), $i = 0;
     163                 $row && (!$paging || $i < $curpagesize);
     164                 $row = mysql_fetch_assoc($result), $i++) {
    163165
    164166                /* Port name and Portfile URL */
Note: See TracChangeset for help on using the changeset viewer.