views:

152

answers:

1

This a template page in my wordpress (have removed html), it pulls out the posts from my wordpress database. I want to paginate it but have no idea! :(

I wan't to get something like this

<< First Prev 1 2 3 4 Next Last >>

       <?php
         $postslist = get_posts('numberposts=10&order=ASC');
         foreach ($postslist as $post) : 
            setup_postdata($post);
    ?>

      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?>   </a></li>
     <li><?php the_excerpt(); ?></li><br/><hr/>

     <?php endforeach; ?>
+1  A: 

Here's a pagination class I use:

<?php

class sitePagination{

    public $currentPage;
    public $perPage;
    public $totalRecords;

    public function __construct($page = 1,$per_page = 2, $total_records = 0){
        $this->currentPage = (int)$page;
        $this->perPage = (int)$per_page;
        $this->totalRecords = (int)$total_records;  
    }

    public function totalPages(){
        return ceil($this->totalRecords / $this->perPage);
    }

    public function previousPage(){
        return $this->currentPage - 1;
    }

    public function nextPage(){
        return $this->currentPage + 1;
    }

    public function previousPageExists(){
        return $this->previousPage() >= 1 ? true : false; 
    }

    public function nextPageExists(){
        return $this->nextPage() <= $this->totalPages() ? true : false; 
    }

    public function offset(){
        return ($this->currentPage - 1) * $this->perPage;
    }

}

?>

And then in the page.html, I used this:

//include the paginate class. I put it in the theme folder
    include("paginate.php");

    //This is the SQL Query to get the number of rows I have
    $count = "SELECT COUNT(*) FROM $wpdb->blogs WHERE site_id = $wpdb->siteid AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00'"; 

    $number =  mysql_query($count);
    $row = mysql_fetch_array($number);
    $num_rows = array_shift($row);

    //Define some variable to hold our pagination settings
    $page = !empty($_GET['current_page']) ? (int)$_GET['current_page'] : 1;
    $perPage = 5;
    $paginate  =  new sitePagination($page,$perPage,$num_rows);

    //This is the actual SQL Query to fetch the Data from Database
    $query = $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC LIMIT {$perPage} OFFSET {$paginate->offset()}", $wpdb->siteid );
    //echo "query is $query<br/>";

    $terms = $wpdb->get_results($query,ARRAY_A);
    echo "<ul>";

    foreach($terms as $detail)
    {
        //$cat_parent = get_category($detail->parent);
        //Had to use the $cat_parent to build the link
        //if some has a better idea, would be nice
        echo "<li style='font-size:1.3em;'><a href='http://".$detail[ 'domain' ].$detail['path']."'>".get_blog_option( $detail['blog_id'], 'blogname' )."</a></li>";
    }

    // The Fun starts here, all the code below will generate our dynamic page number
    // The container class is the same as WP PAGENAVI
    // I'm using a custom pagination class I created
    echo "</ul>";

    //echo "<span class='pages'>Page {$page} of {$paginate->totalPages()}</span>";
    if($paginate->totalPages() > 1){
        if($paginate->previousPageExists()){
            echo '<a href="?cat='.$cat_parent->term_id.'&current_page='.$paginate->previousPage().'">&laquo; Previous</a>';
        }
    }
    if(ceil($paginate->totalPages()) > 1){
        for($i=1;$i < ceil($paginate->totalPages()) + 1;$i++){
            if($page == $i)
                echo '<span class="current"> '.$i.' </span>';
            else
                echo '<a href="'.$cat_parent->slug.'/?current_page='.$i.'"> '.$i.' </a>';

        }
    }

    if($paginate->totalPages() > 1){
        if($paginate->nextPageExists()){
            echo '<a href="?cat='.$cat_parent->term_id.'&current_page='.$paginate->nextPage().'">Next &raquo;</a>';
        }

    }
Dylan West
I get these error:Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\wordpress\wp-content\themes\safwan\page-paginated.php on line 13Warning: array_shift() expects parameter 1 to be array, null given in C:\xampp\htdocs\wordpress\wp-content\themes\safwan\page-paginated.php on line 14
esafwan
Line 13 is : $row = mysql_fetch_array($number); and Line 14 is: $num_rows = array_shift($row);
esafwan
I would make sure that the variables $wpdb->blogs and $wpdb->siteid are indeed populated. I was using wordpress 3.0 for this. If these vars don't echo out what you'd expect, then that would throw off the result of the query that populates the $count var.
Dylan West
solved! Thank You Very Much!
esafwan