URL-адрес нумерации страниц кода с параметрами получения - PullRequest
34 голосов
/ 22 марта 2011

У меня проблемы с настройкой нумерации страниц на codeigniter, когда я передаю параметры в URL

если мой URL такой: search/?type=groups

что должно быть моим $config['base_url'] для нумерации страниц?

если я установлю базовый URL-адрес на search/?type=groups, результирующий URL-адрес будет search/?type=groups/10

что означает $_GET['type']=groups/10

спасибо

Ответы [ 15 ]

99 голосов
/ 06 мая 2011

В конфигурации пагинации:

if (count($_GET) > 0) $config['suffix'] = '?' . http_build_query($_GET, '', "&");

Ваши текущие $_GET переменные будут показаны в ссылках на нумерацию страниц. Вы можете заменить $_GET другим ассоциативным массивом. Это не добавит строку запроса, если она не существует.

Обновление: Я только что видел, что если вы вернетесь с другого номера нумерации страниц на первый (1), CI больше не будет заботиться о вашей конфигурации суффикса.

Чтобы исправить это, используйте $config['first_url'].

Например: $config['first_url'] = $config['base_url'].'?'.http_build_query($_GET);

17 голосов
/ 28 мая 2017

Самый актуальный ответ на этот вопрос:

Вы должны включить повторное использование строки запроса, включив эту конфигурацию:

$config['reuse_query_string'] = true;

, после этого вам следует инициализироватьразбиение на страницы:

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

Добавлено $config['reuse_query_string'] для автоматического повторного заполнения аргументов строки запроса в сочетании с обычными сегментами URI.- CodeIgniter 3.0.0 Журнал изменений

4 голосов
/ 28 августа 2011

Вот мое решение jquery:

Просто оберните ссылки нумерации страниц в div следующим образом:

$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';

, затем добавьте следующий код jquery:

$("#pagination > a").each(function() {
    var g = window.location.href.slice(window.location.href.indexOf('?'));
    var href = $(this).attr('href');
    $(this).attr('href', href+g);
});

У меня отлично работает.

4 голосов
/ 08 апреля 2011

, если вы используете codeigniter 2, есть опция в config.php, $config['allow_get_array'] - убедитесь, что она на TRUE.

Затем установите параметр нумерации страниц $config['page_query_string'] на TRUE.

И, наконец, в вашем случае, установленном $config['base_url'] на "search/?type=groups", нумерация страниц добавит строку запроса per_page после нее.

Это должно работать так, вы получите смещение в $this->input->get("per_page").

код сильный!

2 голосов
/ 03 апреля 2012

Я думаю, что вы пытаетесь сделать то же самое, что я пытался сделать, и я заставил его работать правильно, не устанавливая базовый URL и просто используя эту настройку, он избавил меня от необходимости вручную редактировать библиотеку

$this->load->library('pagination');
    $config['use_page_numbers'] = TRUE;
    $config['page_query_string'] = TRUE;
    $config['total_rows'] = 200;
    $config['per_page'] = 20; 

    $this->pagination->initialize($config); 
2 голосов
/ 02 апреля 2011

Я боролся с той же проблемой сегодня.Мое решение таково:

  1. Создайте ссылки на страницы и сохраните их в виде строки ($pagination = $this->pagination->create_links();)

  2. Используйте regexp, чтобы найти все ссылкии добавьте строки запроса

Используемый код регулярного выражения:

<?php
$query = '?myvar=myvalue';
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
$unique = array();
if( preg_match_all("/$regexp/siU", $pagination, $matches) )
{
    foreach ( $matches[2] as $link )
    {
        if ( !isset($unique[$link]) )
        {
            $data['pagination'] = str_replace($link . '"', $link . $query . '"', $data['pagination']);
            $unique[$link] = '';
        }
    }
}
unset($unique);

Работает для меня как обаяние!Что он делает:

  1. Найти все ссылки
  2. Заменить уникальные ссылки (поскольку есть предыдущие / следующие ссылки, одна и та же ссылка может появляться более одного раза) исходной ссылкой и запросом-string.

Затем просто присвойте переменную шаблону, который будет показан, и используйте print $ your_pagination_variable_name;чтобы показать ссылки с прикрепленными строками запроса!

1 голос
/ 05 апреля 2013

Просто посмотрите эту ссылку .
Просто обновите измененный класс нумерации страниц и добавьте

$config['get'] = "?string=" . $_REQUEST['string']."&searchBy=" . $_REQUEST['searchBy']; 
1 голос
/ 26 июня 2012

Перед строкой:

$this->base_url = rtrim($this->base_url).'&amp;'.$this->query_string_segment.'=';

Замените этот код ниже:

if(isset($_GET[$this->query_string_segment]))
{    
    unset($_GET[$this->query_string_segment]); 
}
$uri = http_build_query($_GET);
$uri = empty($uri) ? '?' : $uri . '&amp;';
$this->base_url = rtrim($this->base_url).$uri.$this->query_string_segment.'=';
1 голос
/ 05 марта 2012

Использование $ config ['суффикс'] - лучший способ реализовать это в IMO, поскольку он не требует дополнительной обработки в качестве решения регулярных выражений.$ config ['суффикс'] используется при рендеринге URL-адресов в функции create_links, которая является частью файла system / library / Pagination.php, поэтому если вы установите значение, оно будет использовано при генерации URL-адресов и получитбольше не требует обработки, что означает, что это будет быстрее.

Спасибо за пост, это сэкономило мне тонны лишнего, не нужного, кодирования!

1 голос
/ 22 марта 2011

Решение состоит в том, что CodeIgniter не работает так. что мне нужно, это метод (в контроллере) для каждого из параметров в «типе» поэтому одним из вариантов будет метод с именем: groups, другой - с именем entry и т. д. и т. д. каждый метод при необходимости ссылается на другой класс модели или метод.

Я пытаюсь лучше понять ООП и КИ ... немного приспособиться, чтобы сделать ... не стесняйтесь комментировать и исправлять меня, если я ошибаюсь. спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...