Welcome Guest, Not a member yet? Register   Sign In
MY_Pagination - Inserts pagination segment into base_url
#1

[eluser]wiredesignz[/eluser]
Allows you to specify where the pagination segment will appear in your base_url



$config['uri_segment'] = 2;
$config['base_url'] = 'showroom/'.$car_make.'/'.$price_range;

inserts pagination segment after 'showroom'


Code:
<?php

include_once(BASEPATH.'libraries/Pagination.php');

class MY_Pagination extends CI_Pagination
{

function MY_Pagination()
{
    parent::CI_Pagination();
}

    function create_links()
    {
        // If our item count or per-page total is zero there is no need to continue.
        if ($this->total_rows == 0 OR $this->per_page == 0)
        {
           return '';
        }

        // Calculate the total number of pages
        $num_pages = ceil($this->total_rows / $this->per_page);

        // Is there only one page? Hm... nothing more to do here then.
        if ($num_pages == 1)
        {
            return '';
        }

        // Determine the current page number.        
        $CI =& get_instance();    
        if ($CI->uri->segment($this->uri_segment) != 0)
        {
            $this->cur_page = $CI->uri->segment($this->uri_segment);
            
            // Prep the current page - no funny business!
            $this->cur_page = (int) $this->cur_page;
        }
                
        if ( ! is_numeric($this->cur_page))
        {
            $this->cur_page = 0;
        }
        
        // Is the page number beyond the result range?
        // If so we show the last page
        if ($this->cur_page > $this->total_rows)
        {
            $this->cur_page = ($num_pages - 1) * $this->per_page;
        }
        
        $uri_page_number = $this->cur_page;
        $this->cur_page = floor(($this->cur_page/$this->per_page) + 1);

        // Calculate the start and end numbers. These determine
        // which number to start and end the digit links with
        $start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
        $end   = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;

        // Add a trailing slash to the base URL if needed
        //$this->base_url = rtrim($this->base_url, '/') .'/';

          // And here we go...
        $output = '';

        // Render the "First" link
        if  ($this->cur_page > $this->num_links)
        {
            $output .= $this->first_tag_open.'<a href="'.$this->_wrap_url_segment('0').'">'.$this->first_link.'</a>'.$this->first_tag_close;
        }

        // Render the "previous" link
        if  (($this->cur_page - $this->num_links) >= 0)
        {
            $i = $uri_page_number - $this->per_page;
            if ($i == 0) $i = '0';
            $output .= $this->prev_tag_open.'<a href="'.$this->_wrap_url_segment($i).'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
        }

        // Write the digit links
        for ($loop = $start -1; $loop <= $end; $loop++)
        {
            $i = ($loop * $this->per_page) - $this->per_page;
                    
            if ($i >= 0)
            {
                if ($this->cur_page == $loop)
                {
                    $output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
                }
                else
                {
                    $n = ($i == 0) ? '0' : $i;
                    $output .= $this->num_tag_open.'<a href="'.$this->_wrap_url_segment($n).'">'.$loop.'</a>'.$this->num_tag_close;
                }
            }
        }

        // Render the "next" link
        if ($this->cur_page < $num_pages)
        {
            $output .= $this->next_tag_open.'<a href="'.$this->_wrap_url_segment($this->cur_page * $this->per_page).'">'.$this->next_link.'</a>'.$this->next_tag_close;
        }

        // Render the "Last" link
        if (($this->cur_page + $this->num_links) < $num_pages)
        {
            $i = (($num_pages * $this->per_page) - $this->per_page);
            $output .= $this->last_tag_open.'<a href="'.$this->_wrap_url_segment($i).'">'.$this->last_link.'</a>'.$this->last_tag_close;
        }

        // Kill double slashes.  Note: Sometimes we can end up with a double slash
        // in the penultimate link so we'll kill all double slashes.
        $output = preg_replace("#([^:])//+#", "\\1/", $output);

        // Add the wrapper HTML if exists
        $output = $this->full_tag_open.$output.$this->full_tag_close;
        
        return $output;        
    }
    // --------------------------------------------------------------------
    
    /**
     * Wrap base_url around uri segment
     *
     * @access    private
     * @param    string  page number
     * @return    string  url
     */
    function _wrap_url_segment($i)
    {
        $segments = explode('/', $this->base_url);
        $segments[$this->uri_segment] .= '/'.$i;
        return implode('/', $segments);
    }
}
?&gt;
#2

[eluser]hotmeteor[/eluser]
Great add-on, thanks. One problem, my page numbers aren't changing. Am I missing something?
#3

[eluser]xwero[/eluser]
Wouldn't it be better to create a replacement library instead of extending the library, create_links is the only working method.

You only improved the url behavior. Maybe you could use a (templated) view file for easier html manipulation.
#4

[eluser]wiredesignz[/eluser]
Umm... I wrote this last year, haven't looked at it since.

But thats a great idea xwero, I'd be eager to see you do that. :lol:
#5

[eluser]xwero[/eluser]
Ok then i will give it a go with your permission Wink
#6

[eluser]hotmeteor[/eluser]
Just so you know, I figured out the issue. It had to do with the uri_segment variable. I had to create another variable that dictated where the offset went and changed it in the _wrap_url_segment function. It worked like a charm after that.

I think the functionality of this pagination should be the standard for CI, so I'll be watching for when you get this finished xwero.
#7

[eluser]xwero[/eluser]
first version of replacement library with the very original name paginate Smile be gentle it's an early morning version. The fully tested version will be in a new topic.
#8

[eluser]wiredesignz[/eluser]
Looking pretty good xwero, I will definitely use this when you're done. Thanks. Wink




Theme © iAndrew 2016 - Forum software by © MyBB