Архив

Публикации с меткой «model»

Ajax-пагинация. CodeIgniter, jQuery.

22 Фев 2010

В данной статье рассматривается реализация 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 , , , , ,

Удобное расширение модели CodeIgniter

22 Сен 2009


Автор кода – Ерёмин Никита. Спасибо за красивое и удобное решение.
В 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 ,