SitePoint Sponsor

User Tag List

Results 1 to 5 of 5
  1. #1
    SitePoint Enthusiast
    Join Date
    May 2007
    Location
    Oslo, Norway
    Posts
    74
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Need help with pagination and variable

    Hi Folks,
    I have found this nice pagination script that works fine except when I'm trying to use variables in the query.
    The first step I try to get working is a variable for clientid. The meny passes this ($cid) to the content page and the record counting, and here it works fine. I get the corrects page numbers and I also get the first image showing, but when I click for page 2 it obviously looses this variable and I get an limit error.
    I have tried to send the variable but it's not working. $pages->client is what I tried. In the paginator.class.php I have added cid=$client in the page links but it gets no variable.
    Here is the code in the content page:

    PHP Code:
    $cid = (int)($_GET['cid']);

    // Full Size View of Content with Pagination
    $query "SELECT COUNT(*), clientid FROM content WHERE sectorid=6 AND subsectorid=7 AND clientid=$cid";
    $numbers mysql_query($query); 
    $num_rows mysql_result($numbers0); 

    require_once(
    '../code/paginator.class.php');

        
    $pages = new paginator;
        
    $pages->items_total $num_rows;
        
    $pages->mid_range 7;
        
    $pages->paginate();
        
    $pages->client $cid;

    $result = @mysql_query"SELECT photo_id, photo_filename, engtext FROM content WHERE clientid=$pages->client AND sectorid=6 AND subsectorid=7 ORDER BY photo_id DESC $pages->limit " );
        if (!
    $result) {
        exit(
    '<p>Error performing query: ' mysql_error() . '</p>');
        }
        while (
    $images mysql_fetch_array($result)) {
        
    $image $images['photo_filename'];
        
    $caption $images['engtext'];
    echo 
    "<img src='../photos/$image' border='0' /><br /><span class='caption'>$caption</span>";

    This is the paginator:
    PHP Code:
    echo $pages->display_pages(); 
    and this is the paginator.class.php:

    PHP Code:
    class Paginator{
        var 
    $items_per_page;
        var 
    $items_total;
        var 
    $current_page;
        var 
    $num_pages;
        var 
    $mid_range;
        var 
    $low;
        var 
    $high;
        var 
    $limit;
        var 
    $return;
        var 
    $default_ipp 1;
        var 
    $client;

        function 
    Paginator()
        {
            
    $this->current_page 1;
            
    $this->mid_range 7;
            
    $this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
        }

        function 
    paginate()
        {
            if(
    $_GET['ipp'] == 'All')
            {
                
    $this->num_pages ceil($this->items_total/$this->default_ipp);
                
    $this->items_per_page $this->default_ipp;
            }
            else
            {
                if(!
    is_numeric($this->items_per_page) OR $this->items_per_page <= 0$this->items_per_page $this->default_ipp;
                
    $this->num_pages ceil($this->items_total/$this->items_per_page);
            }
            
    $this->current_page = (int) $_GET['page']; // must be numeric > 0
            
    if($this->current_page Or !is_numeric($this->current_page)) $this->current_page 1;
            if(
    $this->current_page $this->num_pages$this->current_page $this->num_pages;
            
    $prev_page $this->current_page-1;
            
    $next_page $this->current_page+1;

            if(
    $this->num_pages 3)
            {
                
    $this->return = ($this->current_page != And $this->items_total >= 3) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?cid=$client&page=$prev_page&ipp=$this->items_per_page\"><img src='../../images/arrow_left.gif' border='0' /></a> ":"<span class=\"inactive\" href=\"#\"><img src='../../images/arrow_blank.gif' border='0' /></span> ";

                
    $this->start_range $this->current_page floor($this->mid_range/2);
                
    $this->end_range $this->current_page floor($this->mid_range/2);

                if(
    $this->start_range <= 0)
                {
                    
    $this->end_range += abs($this->start_range)+1;
                    
    $this->start_range 1;
                }
                if(
    $this->end_range $this->num_pages)
                {
                    
    $this->start_range -= $this->end_range-$this->num_pages;
                    
    $this->end_range $this->num_pages;
                }
                
    $this->range range($this->start_range,$this->end_range);

                for(
    $i=1;$i<=$this->num_pages;$i++)
                {
                    if(
    $this->range[0] > And $i == $this->range[0]) $this->return .= " ... ";
                    
    // loop through all pages. if first, last, or in range, display
                    
    if($i==Or $i==$this->num_pages Or in_array($i,$this->range))
                    {
                        
    $this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?cid=$client&page=$i&ipp=$this->items_per_page\">$i</a> ";
                    }
                    if(
    $this->range[$this->mid_range-1] < $this->num_pages-And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
                }
                
    $this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 2) And ($_GET['page'] != 'All')) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?cid=$client&page=$next_page&ipp=$this->items_per_page\"><img src='../../images/arrow_right.gif' border='0' /></a>\n":"<span class=\"inactive\" href=\"#\"><img src='../../images/arrow_blank.gif' border='0' /></span>\n";
            }
            else
            {
                for(
    $i=1;$i<=$this->num_pages;$i++)
                {
                    
    $this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">0$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?cid=$client&page=0$i&ipp=$this->items_per_page\">0$i</a> ";
                }
            }
            
    $this->low = ($this->current_page-1) * $this->items_per_page;
            
    $this->high = ($_GET['ipp'] == 'All') ? $this->items_total:($this->current_page $this->items_per_page)-1;
            
    $this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
        }

        function 
    display_items_per_page()
        {
            
    $items '';
            
    $ipp_array = array(10,25,50,100,'All');
            foreach(
    $ipp_array as $ipp_opt)    $items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
            return 
    "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?cid=$client&page=1&ipp='+this[this.selectedIndex].value;return false\">$items</select>\n";
        }

        function 
    display_jump_menu()
        {
            for(
    $i=1;$i<=$this->num_pages;$i++)
            {
                
    $option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
            }
            return 
    "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?cid=$client&page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page';return false\">$option</select>\n";
        }

        function 
    display_pages()
        {
            return 
    $this->return;
        }

    Appriciate any help. Thanks!

  2. #2
    Non-Member Kalon's Avatar
    Join Date
    Aug 2010
    Location
    At my computer
    Posts
    2,012
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    if it's any help, a demo of the pagination class I use is in this thread (post 11).

    the sql script to create the database table the demo uses is in post 4.

  3. #3
    messing with my mind fristi's Avatar
    Join Date
    Feb 2009
    Posts
    292
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    inside a class you need to call the properties (variables in an object) through the use of the $this keyword, so in your case:

    $this->client

    PHP Code:

        
    function display_jump_menu() 
        { 
            for(
    $i=1;$i<=$this->num_pages;$i++) 
            { 
                
    $option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n"
            } 
            return 
    "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?cid=$this->client&page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page';return false\">$option</select>\n"
        } 
    To PHP or to Perl, that is the question!
    (Bucket - simpletest) User

  4. #4
    SitePoint Enthusiast
    Join Date
    May 2007
    Location
    Oslo, Norway
    Posts
    74
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks a lot fristi, it works perfect:-)
    Good to know about the $this keyword - I'v never used a class before.
    Guess I can do the same with the other two WHERE clauses?

    Thanks for your reply Kalon, I will take a further look at that also. I checked it yesterday but it was a new approach and I still hope to use the one I started with.

  5. #5
    messing with my mind fristi's Avatar
    Join Date
    Feb 2009
    Posts
    292
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Everywhere inside a class you need to use $this->client, to access it outside the class you need to use the $pages->client form.

    Generally it is considered bad practice to access an object variable directly like $pages->client and you should change the class to use it like $pages->get('client') or overload the class. But that is all difficult mumbojumbo for someone who is just starting to use classes.

    I would recommend reading the following:
    http://articles.sitepoint.com/articl...t-oriented-php

    A few years ago I started with that and it covers some good basics
    To PHP or to Perl, that is the question!
    (Bucket - simpletest) User


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •