URL-адрес для кодирования URL-адреса с параметрами получения
У меня возникли проблемы с настройкой разбиения на страницы на codeigniter, когда я передаю параметры в URL
если мой URL-адрес выглядит следующим образом: search/?type=groups
Каким должен быть мой $config['base_url']
для разбивки на страницы?
если я устанавливаю базовый url на search/?type=groups
, полученный URL-адрес search/?type=groups/10
что означает $_GET['type']=groups/10
Благодарю вас
Ответы
Ответ 1
Решение состоит в том, что CodeIgniter не работает так.
мне нужен метод (в контроллере) для каждого из вариантов в "типе",
поэтому одним из вариантов может быть метод, называемый: groups, другой - имена и т.д. и т.д.
каждый метод ссылается на другой класс или метод модели по мере необходимости.
Я пытаюсь лучше понять ООП и CI... немного подстраиваться, чтобы... не стесняйтесь комментировать и исправлять меня, если я ошибаюсь.
спасибо
Ответ 2
В конфигурации страницы:
if (count($_GET) > 0) $config['suffix'] = '?' . http_build_query($_GET, '', "&");
Ваши текущие $_GET
vars будут показаны в ссылках на страницы.
Вы можете заменить $_GET
на другой ассоциативный массив.
Это не добавит строку запроса, если она уже не существует.
Update:
Я только что видел, если вы вернетесь из другого номера страницы, чтобы щелкнуть по первому (1), CI больше не заботится о вашей конфигурации суффикса.
Чтобы исправить это, используйте $config['first_url']
.
например: $config['first_url'] = $config['base_url'].'?'.http_build_query($_GET);
Ответ 3
если вы используете codeigniter 2, есть опция в config.php
, $config['allow_get_array']
- убедитесь, что она на TRUE.
Затем установите для параметра pagination $config['page_query_string']
значение TRUE
.
И, наконец, в вашем случае установите $config['base_url']
на "search/?type=groups"
, после этого страница будет добавлять строку запроса per_page
.
Он должен работать таким образом, вы получите смещение в $this->input->get("per_page")
.
code strong!
Ответ 4
Вот мое решение 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);
});
Прекрасно работает для меня.
Ответ 5
Самый последний ответ на этот вопрос:
Вы должны включить повторное использование строки запроса, включив эту конфигурацию:
$config['reuse_query_string'] = true;
после этого вы должны инициализировать разбивку на страницы:
$this->pagination->initialize($config);
Добавлен $config['reuse_query_string']
, чтобы разрешить автоматическую репопуляцию аргументов строки запроса, в сочетании с обычными сегментами URI. - CodeIgniter 3.0.0 Журнал изменений
Ответ 6
Я боролся с тем же вопросом сегодня. Мое решение таково:
Используемый код регулярного выражения:
<?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);
Работает как очарование для меня! Что он делает:
- Найти все ссылки
- Замените уникальные ссылки (так как есть предыдущие/следующие ссылки, одна и та же ссылка может появляться более одного раза) с исходной ссылкой и строкой запроса.
Затем просто назначьте переменную шаблону, который будет показан, и используйте print $your_pagination_variable_name; чтобы показать ссылки с вашими строками запроса!
Ответ 7
Использование $config ['suffix'] - лучший способ реализации IMO для этого, потому что он не требует дополнительной обработки в качестве решения регулярного выражения. $config ['suffix'] используется при рендеринге URL-адресов в функции create_links, которая является частью файла system/libraries/Pagination.php, поэтому, если вы установите значение, которое оно будет использоваться при генерации URL-адресов и выиграет 't требуется больше обработки, что означает, что она будет быстрее.
Спасибо за сообщение, это спасло мне много лишнего, не нужно, кодирования!
Ответ 8
Я думаю, что вы пытаетесь сделать то же самое, что я пытался сделать, и я получил его для правильной работы, не устанавливая базовый 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);
Ответ 9
Перед строкой:
$this->base_url = rtrim($this->base_url).'&'.$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 . '&';
$this->base_url = rtrim($this->base_url).$uri.$this->query_string_segment.'=';
Ответ 10
Просто просмотрите эту ссылку.
Просто обновите измененный класс разбиения на страницы, а затем добавьте
$config['get'] = "?string=" . $_REQUEST['string']."&searchBy=" . $_REQUEST['searchBy'];
Ответ 11
У меня такая же проблема. Мое решение - изменить Pagination и поместить его в приложение/библиотеки.
Сначала создаю
var $get='';
и найдите все "a" элементы и добавьте $get в href="........'.$this->get.'"'>.......</a>
Теперь в контроллере или модели введите эту строку
$config['get']=(isset($_GET['search']))?'?search='.$_GET['search']:'';
Что это! Я надеюсь, что это поможет вам.
Ответ 12
В ВАШЕМ КОНТРОЛЛЕЛЕ:
$config ['anchor_class'] = "class= 'link-pagination'";
В ВАШЕМ ПРОСМОТРЕ:
$(".link-pagination").each(function() {
$(this).attr("href", $(this).attr('href') + "?id=<?= $this->input->get('id') ?>");
});
Ответ 13
Имел ту же проблему, но понял, что более новые версии CI имеют суффикс, определенный в классе разбиения на страницы. Хотя это еще не в документации. Не нужно взламывать его.
Ответ 14
Я столкнулся с подобной проблемой, и на основе вышеприведенного ответа вот что я должен сделать для настройки в соответствии с моими потребностями.
Мой URI должен был быть примерно таким:
base_url() . /search/?term=
Итак, вот что я сделал:
$config['base_url'] = base_url ."/search/?term=" . $_GET['term']
Ответ 15
Надеюсь, вы найдете ответ на этой странице:
ССЫЛКА. Отредактируйте свой ответ, если сможете.