Domanda

Il codice seguente genera impaginazione usando stringhe di query. Tuttavia, non esiste un leader ?. Quindi, ottengo qualcosa di simile: http://localhost/index.php/search/&limit=10. Qualche idea perché?

this->load->library('pagination');

$config                   = array();
$config['base_url']       = 'http://localhost/index.php/search/';
$config['total_rows']     = 200;
$config['per_page']       = 10;
$config['num_links']      = 4;

$config['full_tag_open']  = '<ol>';
$config['full_tag_close'] = '</ol>';

$config['first_link']      = 'First';
$config['first_tag_open']  = '<li>';
$config['first_tag_close'] = '</li>';

$config['last_link']      = 'Last';
$config['last_tag_open']  = '<li>';
$config['last_tag_close'] = '</li>';

$config['next_link']      = 'Next';
$config['next_tag_open']  = '<li>';
$config['next_tag_close'] = '</li>';

$config['prev_link']      = 'Previous';
$config['prev_tag_open']  = '<li>';
$config['prev_tag_close'] = '</li>';

$config['cur_tag_open']  = '<li class="active">';
$config['cur_tag_close'] = '</li>';

$config['num_tag_open']  = '<li>';
$config['num_tag_close'] = '</li>';

$this->pagination->initialize($config);
echo ($this->pagination->create_links());

EDIT 1:

http://codeigniter.com/forums/viewthread/161263/

EDIT 2:

I dottori sembrano suggerire che ciò che ho fatto dovrebbe funzionare: http://codeigniter.com/user_guide/libraries/pagination.html

$config['page_query_string'] = TRUE;

Per impostazione predefinita, la libreria di impaginazione presume che tu stia usando segmenti URI e costruisce i tuoi collegamenti come

http://example.com/index.php/test/page/20

Se hai $config['enable_query_strings'] Impostare su TRUE I tuoi collegamenti verranno automaticamente riscritti usando stringhe di query. Questa opzione può anche essere esplicitamente impostata. Usando $config['page_query_string'] impostato TRUE, il collegamento a impaginazione diventerà.

http://example.com/index.php?c=test&m=page&per_page=20

È stato utile?

Soluzione

Mi sono imbattuto in questo io stesso. Quando si utilizzano stringhe di query, CodeIgniter deve supporre di avere altri parametri di stringa di query (ma CI presuppone che tu stia utilizzando i parametri della stringa di query per mappare il controller e il metodo ...). Mi piace usare la stringa di query per cose come i risultati di filtraggio e simili, pur uso delle opzioni di routing di base nell'URI (come te).

Ho dovuto convivere con il? E personalmente, ma suppongo che potresti estendere la biblioteca di impaginazione in questo modo (lunga funzione, scusa):

class MY_Pagination extends 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->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
    {
        if ($CI->input->get($this->query_string_segment) != 0)
        {
            $this->cur_page = $CI->input->get($this->query_string_segment);

            // Prep the current page - no funny business!
            $this->cur_page = (int) $this->cur_page;
        }
    }
    else
    {
        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;
        }
    }

    $this->num_links = (int)$this->num_links;

    if ($this->num_links < 1)
    {
        show_error('Your number of links must be a positive number.');
    }

    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;

    // Is pagination being used over GET or POST?  If get, add a per_page query
    // string. If post, add a trailing slash to the base URL if needed
    if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
    {
        $this->base_url = str_replace('?&amp;', '?', rtrim($this->base_url).'&amp;'.$this->query_string_segment.'=');
    }
    else
    {
        $this->base_url = rtrim($this->base_url, '/') .'/';
    }

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

    // Render the "First" link
    if  ($this->first_link !== FALSE AND $this->cur_page > ($this->num_links + 1))
    {
        $first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;
        $output .= $this->first_tag_open.'<a '.$this->anchor_class.'href="'.$first_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;
    }

    // Render the "previous" link
    if  ($this->prev_link !== FALSE AND $this->cur_page != 1)
    {
        $i = $uri_page_number - $this->per_page;

        if ($i == 0 && $this->first_url != '')
        {
            $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
        }
        else
        {
            $i = ($i == 0) ? '' : $this->prefix.$i.$this->suffix;
            $output .= $this->prev_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
        }

    }

    // Render the pages
    if ($this->display_pages !== FALSE)
    {
        // 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) ? '' : $i;

                    if ($n == '' && $this->first_url != '')
                    {
                        $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$loop.'</a>'.$this->num_tag_close;
                    }
                    else
                    {
                        $n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;

                        $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;
                    }
                }
            }
        }
    }

    // Render the "next" link
    if ($this->next_link !== FALSE AND $this->cur_page < $num_pages)
    {
        $output .= $this->next_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.($this->cur_page * $this->per_page).$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;
    }

    // Render the "Last" link
    if ($this->last_link !== FALSE AND ($this->cur_page + $this->num_links) < $num_pages)
    {
        $i = (($num_pages * $this->per_page) - $this->per_page);
        $output .= $this->last_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.$i.$this->suffix.'">'.$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;
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top