SitePoint Sponsor

User Tag List

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

    Pagination with two digits

    Hi folks,

    I have this pagination script (php class) which works fine except that my client wants pages from 1-9 to have two digits, 01, 02, 03...
    Is it possible to do this without change the hole script?
    I've tried to put in a function I picked up, but I'm not sure how it could be used together with the existing code.
    Appriciate any help. Thanks!

    PHP Code:
    function dotwodigits($val) {
    if (
    intval($val) < 10) {
    $twodigits "0$val";
    }
    elseif (
    intval($val) >= 10) {
    $twodigits $val;
    }
    return 
    $twodigits;

    Here is the pagination script:
    PHP Code:
    <?php


    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;
        var 
    $sector;

        function 
    Paginator()
        {
            
    $this->current_page 1;
            
    $this->mid_range 7;
            
    $this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
        }
        
    function 
    dotwodigits($val) {
    if (
    intval($val) < 10) {
    $twodigits "0$val";
    }
    elseif (
    intval($val) >= 10) {
    $twodigits $val;
    }
    return 
    $twodigits;
    }

        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 )
            {
            
    $this->return = ($this->current_page != And $this->items_total >= 3) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?sid=$this->sector&cid=$this->client&page=$prev_page&ipp=$this->items_per_page\"><img src='../images/arrow_left.png' border='0' align='left' /></a> ":"<span class=\"inactive\" href=\"#\"><img src='../images/arrow_blank.png' border='0' align='left' /></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]?sid=$this->sector&cid=$this->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]?sid=$this->sector&cid=$this->client&page=$next_page&ipp=$this->items_per_page\"><img src='../images/arrow_right.png' border='0' align='right' /></a>\n":"<span class=\"inactive\" href=\"#\"><img src='../images/arrow_blank.png' border='0' align='right' /></span>\n";
            }
            else
            {
                for(
    $i=1;$i<=$this->num_pages;$i++)
                {
                    
    $this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?cid=$this->client&page=$i&ipp=$this->items_per_page\">$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]?sid=$this->sector&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]?sid=$this->sector&cid=$client&page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page';return false\">$option</select>\n";
        }

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

  2. #2
    SitePoint Member
    Join Date
    Jan 2009
    Posts
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I think you should change

    PHP Code:
    "<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]?sid=$this->sector&cid=$this->client&page=$i&ipp=$this->items_per_page\">$i</a> "
    with

    PHP Code:
    "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">".dotwodigits($i) ."</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?sid=$this->sector&cid=$this->client&page=$i&ipp=$this->items_per_page\">".dotwodigits($i)."</a> "
    I have just replaced the value of the page ($i) with the value returned by the function (dotwodigits($i)). I hope that this wil work for you.

  3. #3
    SitePoint Enthusiast
    Join Date
    May 2007
    Location
    Oslo, Norway
    Posts
    74
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks for your reply Alex.

    I get this error:
    Fatal error: Call to undefined function dotwodigits() in ... /paginator.class.php on line 78

    Maybe the function is not correctly set?

  4. #4
    From Italy with love silver trophybronze trophy
    guido2004's Avatar
    Join Date
    Sep 2004
    Posts
    9,506
    Mentioned
    163 Post(s)
    Tagged
    4 Thread(s)
    $this->dotwodigits($i)

  5. #5
    SitePoint Member
    Join Date
    Jan 2009
    Posts
    21
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Sorry,

    guido2004 is right. Forgot $this-> ....

  6. #6
    SitePoint Enthusiast
    Join Date
    May 2007
    Location
    Oslo, Norway
    Posts
    74
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Beautiful Thanks a lot both of you!


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
  •