В данной статье рассматривается реализация Ajax-пагинации в фреймворке CodeIgniter с использованием JavaScript-библиотеки jQuery.
Для начала сделаем обычную пагинацию, а потом разберемся как реализовать пагинацию без перезагрузки всей веб-страницы.
Здесь работающий пример: ajax-пагинация
У нас есть список автомобилей, который хранится в базе данных в таблице ex_cars:
1. Таблица в БД ex_cars (id, name, year, price)
| id |
name |
year |
price |
| 1 |
Ваз-2109 |
2010 |
8000 |
| 2 |
Ланос |
2009 |
9000 |
| 3 |
Toyota |
2010 |
30000 |
| 4 |
BMW |
2009 |
40000 |
| 5 |
Audi |
2010 |
50000 |
| 6 |
Opel |
2009 |
25000 |
| 7 |
Skoda |
2010 |
20000 |
Нам нужно вывести этот список на веб-страницу. Но поскольку база данных будет пополняться новыми автомобилями, то необходимо отображать фиксированное число записей и номера страниц в виде ссылок. Кликая по которым, мы сможем просмотреть все необходимые нам данные. Проще говоря, нам надо прикрутить пагинацию к выводимому списку автомобилей. Читать полностью…
CodeIgniter
$.load, Ajax, CodeIgniter, jQuery, model, pagination
Автор кода – Ерёмин Никита. Спасибо за красивое и удобное решение.
В system/application/models создаем файл base_model.php. В этом файле и будет описан наш класс, который расширяет основную модель фреймворка:
<?php
class Base_model extends Model {
protected $table;
protected static $count; //общее число записей (для пейджинации)
function Base_model() {
parent::Model();
// Вырезаем из имени класса модели окончание "_model"
//(Например, из User_model получаем User)
$model_class_name = strtolower(get_class($this));
$this->table = substr_replace($model_class_name,"",
strpos($model_class_name,"_model"),6);
}
function get_all($limit='', $offset='', $order_by='') {
$this->db->select('*');
$this->db->from($this->table);
if ($order_by)
$this->db->order_by($order_by);
self::$count = $this->db->count_all_results('', true);
$this->apply_pagination_settings($limit, $offset);
return $this->db->get()->result();
}
function apply_pagination_settings($limit, $offset) {
if ($limit and $offset) {
$this->db->limit($limit, $offset);
}
elseif ($limit) {
$this->db->limit($limit);
}
return;
}
function count_all() {
if (self::$count) {
return self::$count;
}
return $this->db->count_all($this->table);
}
function find($where, $order_by='') {
$this->db->select('*');
$this->db->from($this->table);
$this->db->where($where);
if ($order_by != '') {
$this->db->order_by($order_by);
}
$result = $this->db->get()->result();
return $result;
}
function get_by_id($id) {
$this->db->select('*');
$this->db->from($this->table);
$this->db->where('id', $id);
$res = $this->db->get()->result();
if (count($res) > 0)
return $res[0];
return null;
}
function save($id, $data) {
if ($id) {
foreach($data as $key=>&$item)
{
if($item===''){unset($data[$key]);}
}
$this->db->where('id', $id);
$this->db->update($this->table, $data);
}
else {
$this->db->insert($this->table, $data);
}
}
function delete($id) {
$this->db->delete($this->table, array('id' => $id));
}
}
?>
Читать полностью…
CodeIgniter
CodeIgniter, model