Код, который вы просматриваете на форумах Codeigniter, использует прогрессивное улучшение.Это означает, что код работает так же хорошо без javascript (хотя и с обновлением страницы).
Итак, первый шаг для вас - заставить свою работу разбивать на страницы с отключенным javascript, и тогда вы будетевозможность добавлять функциональность AJAX.
Теперь, нумерация страниц работает так, что вы используете SQL LIMIT
в своем запросе, чтобы ограничить результаты для каждого запроса.LIMIT
принимает 2 значения, смещение и сумму следующим образом: если вы хотите отобразить 2 строки на странице, вы запросите базу данных с помощью LIMIT 0, 2
.Это значит «начать с первого ряда и дать мне всего 2 ряда».Затем для следующей страницы вы выполняете запрос с помощью LIMIT 2, 2
, что означает «начать с третьей строки (2 - третья строка - это индекс с нуля) и дать мне всего 2 строки».
Вы будете делать это с каждым запросом, так что следующий запрос будет иметь LIMIT 4, 2
, и так далее, и так далее.Как видите, единственное, что меняется от одного запроса к следующему, - это смещение (с какой строки следует начинать запрос).
Теперь, как работает класс разбиения на страницы Codeigniter, это то, что он помещаетсмещение каждой страницы в ссылках, которые она генерирует с $this->pagination->create_links()
.Куда идет смещение?Это определяется $config['uri_segment']
, но по умолчанию установлено значение 3. Поскольку вы не предоставили полный код, я не знаю, как называется ваш контроллер.Давайте предположим, что это называется hotels
.Итак, вы должны установить $config['base_url'] = 'hotels/show';
.Как видите, ваш первый сегмент URI равен hotels
, второй - show
, а третий будет смещением, которое сгенерировал для вас класс Pagination.
Как добратьсяэто смещение?Я рад, что ты спросил.Просто взяв аргумент show
, Codeigniter передаст ему 3-й сегмент URI.Таким образом, мы получаем следующее:
function show($offset = 0)
{
$this->load->library('pagination');
$config['base_url'] = 'hotels/show'; // Change this to your controller name
$config['total_rows'] = '200'; // In reality, this should be the actual number of rows in your table
$config['per_page'] = '2';
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$offset = (int) $offset; // just to make sure nothing funky gets in here
$data['query_select'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.* ".
"FROM (SELECT @rownum:=0) r, hotel_submits t ".
"ORDER BY id desc LIMIT $offset, 2");
// I just split it into lines so that SO doesn't make you scroll too much :-)
$this->load->view('admin/accommodation_submit_show', $data);
}
Теперь ваши ссылки на страницы должны работать так, как объявлено, но они будут полностью обновлять страницу.Чтобы обойти это, сделайте следующее:
$(function() {
// Assuming your pagination links
// are in a div with ID of pagination,
// and that you want to paginate a table with ID of paginate
$('#pagination a').live('click', function() {
$.get( $(this).attr('href'), function(html) {
$('table#paginate').replaceWith( $(html).find('table#paginate') );
$('#pagination').replaceWith( $(html).find('#pagination') );
});
return false;
});
});
Все это должно работать.Тем не менее, мы можем улучшить это.В текущем состоянии кода мы получаем html для полной страницы с каждым кликом и просто отфильтровываем то, что нам нужно.Хотя это работает, нет необходимости отправлять столько дополнительной информации, которая не нужна.
То, что они делают на форумах там, - это создание другого контроллера, специально предназначенного для этих запросов ajax, так что он будетобслуживайте только соответствующий HTML-код таблицы и ничего более.
Если вам нужна помощь, сообщите мне.