开发者

PHP pagination problem

So for some reason I am trying to figure out why my pagination isnt working properly. I get it to move from page 1 to 2 but it wont go to page 3 for some reason. I checked to see if the query from the DB was correct and it was so not sure where I am going wrong.

$per_page = '4';

$tenure_sql =  'SELECT COUNT(id) as count
                FROM people.bywu
                WHERE type <> 0
                AND status = "approved"';

$tenure_query = mysql_query( $tenure_sql, DB );

$tenure_count = mysql_fetch_object( $tenure_query );
$tenure_count = $tenure_count -> count;
$tenure_pages = ceil( $tenure_count / $per_page );

<div class="pagination" id="tenure_pages">
<a href="" class="lt grayed">&lt;</a>
Stories <span id="tenure_low" class="current_low"><?= $tenure_count ? '1':'0' ?></span>-<span id="tenure_high" class="current_high"><?= $tenure_count > 4 ? $per_page : $tenure_count ?></span> of <span class="total"><?= $tenure_count ?></span>
<a href="" class="gt<?= $tenure_count < 5 ? ' grayed':'' ?>">&gt;</a>
<span class="pages" style="display:开发者_如何学JAVAnone;"><?= $tenure_pages ?></span>
<?
    for( $i = 1; $i < $tenure_pages + 1; $i++ )
    {
    echo '<a href="">' . $i . '</a> ';
    } // for
?>


Scrapped away from kohana pagination class, i think you will find it useful if you know any basics about php classes.

Usage :

$pager = Pagination::factory(array('current_page' => $_GET['page'], 'total_items' => $total_items, 'items_per_page' => 20));

if ($pager->next_page) { /* etc.......*/ }

<?php
class Pagination {


    protected $config = array(
            'current_page'      => 1,
        'total_items'       => 0,
        'items_per_page'    => 10
    );

    // Current page number
    protected $current_page;

    // Total item count
    protected $total_items;

    // How many items to show per page
    protected $items_per_page;

    // Total page count
    protected $total_pages;

    // Item offset for the first item displayed on the current page
    protected $current_first_item;

    // Item offset for the last item displayed on the current page
    protected $current_last_item;

    // Previous page number; FALSE if the current page is the first one
    protected $previous_page;

    // Next page number; FALSE if the current page is the last one
    protected $next_page;

    // First page number; FALSE if the current page is the first one
    protected $first_page;

    // Last page number; FALSE if the current page is the last one
    protected $last_page;

    // Query offset
    protected $offset;

    /**
     * Creates a new Pagination object.
     *
     * @param   array  configuration
     * @return  Pagination
     */
    public static function factory(array $config = array())
    {
        return new Pagination($config);
    }

    /**
     * Creates a new Pagination object.
     *
     * @param   array  configuration
     * @return  void
     */
    public function __construct(array $config = array())
    {


        // Pagination setup
        $this->setup($config);

    }



    /**
     * Loads configuration settings into the object and (re)calculates pagination if needed.
     * Allows you to update config settings after a Pagination object has been constructed.
     *
     * @param   array   configuration
     * @return  object  Pagination
     */
    public function setup(array $config = array())
    {


        // Only (re)calculate pagination when needed
        if ($this->current_page === NULL
            OR isset($config['current_page'])
            OR isset($config['total_items'])
            OR isset($config['items_per_page']))
        {

            // Calculate and clean all pagination variables
            $this->current_page = (int) $this->config['current_page'];
            $this->total_items        = (int) max(0, $this->config['total_items']);
            $this->items_per_page     = (int) max(1, $this->config['items_per_page']);
            $this->total_pages        = (int) ceil($this->total_items / $this->items_per_page);
            $this->current_page       = (int) min(max(1, $this->current_page), max(1, $this->total_pages));
            $this->current_first_item = (int) min((($this->current_page - 1) * $this->items_per_page) + 1, $this->total_items);
            $this->current_last_item  = (int) min($this->current_first_item + $this->items_per_page - 1, $this->total_items);
            $this->previous_page      = ($this->current_page > 1) ? $this->current_page - 1 : FALSE;
            $this->next_page          = ($this->current_page < $this->total_pages) ? $this->current_page + 1 : FALSE;
            $this->first_page         = ($this->current_page === 1) ? FALSE : 1;
            $this->last_page          = ($this->current_page >= $this->total_pages) ? FALSE : $this->total_pages;
            $this->offset             = (int) (($this->current_page - 1) * $this->items_per_page);
        }

        // Chainable method
        return $this;
    }


    /**
     * Returns a Pagination property.
     *
     * @param   string  property name
     * @return  mixed   Pagination property; NULL if not found
     */
    public function __get($key)
    {
        return isset($this->$key) ? $this->$key : NULL;
    }

    /**
     * Updates a single config setting, and recalculates pagination if needed.
     *
     * @param   string  config key
     * @param   mixed   config value
     * @return  void
     */
    public function __set($key, $value)
    {
        $this->setup(array($key => $value));
    }

} // End Pagination

 ?>


Unless the count() you get from the database is 9 or larger, you'd never see a 3.

   ceil(0/4) -> 0
   ...
   ceil(8/4) -> 2
   ceil(9/4) -> 3

So... how many articles are there in the database that match the conditions in your query?


You don't show how you're passing around the "current page" count in your code, so how does the code know which page you're on at the moment?

$total_pages = 8;
$current_page = $_GET['curPage'];

for ($i = 1; $i <= $total_pages; $i++) {
   $class = ($i == $current_page) ? ' class="current"' : '';
   echo <<<EOL
<a href="page.php?curPage=$i"$class>$i</a>

EOL;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜