Установка модуля Pagination Kohana 3.2
Дата: 02-05-2012
1. Качаем модуль по ссылке на GitHub https://github.com/kloopko/kohana-pagination
2. Устанавливаем в папку c модулями /modules/pagination/
3. Копируем файл с конфигом config.php в основную папку конфигов нашего приложения /application/config
У меня он выглядит так:
'default' => array(
'current_page' => array('source' => 'route', 'key' => 'page'), // source: "query_string" or "route"
'total_items' => 0,
'items_per_page' => 5,
'view' => 'pagination/basic',
'auto_hide' => FALSE,
'first_page_in_url' => FALSE,
4. Неоходимо в bootsrap.php подключить модуль:
Добавить
Kohana::modules(array(
'auth' => MODPATH.'auth', // Basic authentication
// 'cache' => MODPATH.'cache', // Caching with multiple backends
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
'database' => MODPATH.'database', // Database access
// 'image' => MODPATH.'image', // Image manipulation
'orm' => MODPATH.'orm', // Object Relationship Mapping
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'userguide' => MODPATH.'userguide', // User guide and API documentation
'captcha' => MODPATH.'captcha', //Captcha
'pagination' => MODPATH.'pagination', // Pagination
));
4. Переписываем роут где нужно сделать постраничную навигацию:
Route::set('default', '((/(/page)(/)))', array('page'=>'[0-9]+'))
->defaults(array(
'controller' => 'index',
'action' => 'index',
));
5. В экшине контроллера где выводится постраничная навигация прописываем, что-то вроде:
public function action_index() {
// echo 'Page -> ' . $this->request->param('page');
$count = ORM::factory('note')->count_all();
$pagination = Pagination::factory(array(
'total_items' => $count,
))
->route_params(array(
'controller' => Request::current()->controller(),
'action' => Request::current()->action(),
));
$posts = ORM::factory('note')->order_by('date', 'DESC')
->limit($pagination->items_per_page)
->offset($pagination->offset)
->find_all();
$this->template->content = View::factory('front/v_posts', array(
'posts' => $posts,
'pagination' => $pagination,));
}
6. В вид переданы посты и html постраничной навигации. That's all!
Категория: PHP
ORM Kohana examples
Дата: 27-02-2012
Небольшой конспект по ORM.
ORM (англ. Object-relational mapping, рус. Объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». http://ru.wikipedia.org/wiki/ORM
Основное достоинство ORM:
ORM избавляет программиста от написания большого количества кода, часто однообразного и подверженного ошибкам, тем самым значительно повышая скорость разработки. Кроме того, большинство современных реализаций ORM позволяют программисту при необходимости самому жёстко задать код SQL-запросов, который будет использоваться при тех или иных действиях (сохранение в базу данных, загрузка, поиск и т. д.) с постоянным объектом.
Использование ORM:
1. Раскомментить в bootstrap.php:
Kohana::modules(array(
'auth' => MODPATH.'auth', // Basic authentication
// 'cache' => MODPATH.'cache', // Caching with multiple backends
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
'database' => MODPATH.'database', // Database access
// 'image' => MODPATH.'image', // Image manipulation
'orm' => MODPATH.'orm', // Object Relationship Mapping
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'userguide' => MODPATH.'userguide', // User guide and API documentation
));
2. Правила!
Например в БД есть таблица 'peoples' - таблица должна быть названа во множественном числе.
А модель должна быть в единственном, т.е. /clasess/model/people.php
Внутри код подобный этому:
defined('SYSPATH') or die('No direct script access.');
class Model_People extends ORM {
protected $_table_name = 'peoples';
protected $_primary_key = 'people_id';
}
Если указывать имя таблицы явно
protected $_table_name = 'peoples';
То имя таблицы необязательно должно совпадать с именем модели.
Таблица должна обязательно иметь primary_key - id, если он отличается от id - то нужно указать его явно protected $_primary_key = 'people_id';
3. Работа с данными в ORM
Допустим у нас есть в таблице поля: `peоple_id`, `name`, `age`.
Добавление данных:
$people = ORM::factory('people');
$people->name = 'Batman';
$people->age = '32';
$people->save(); // Сохранение записи
Удаление данных:
Например, необходимо удалить данные с people_id = 3
$d = ORM::factory('people', 3);
if ($d->loaded()) // Проверка на существование записи в таблице с id равным 3
{
$d->delete(); // Удаление записи
}
Update данных:
$people = ORM::factory('people', $id); // где $id - id записи, которую мы хотим редактировать
$people->name = 'Batman';
$people->age = '35';
$people->save(); // Сохранение записи
/* Равнозначно запросу:
UPDATE `people`
SET `name`='Batman', `age`=35
WHERE `people_id`=$id
*/
Работа со связанными данными:
Связи:
Один-к-одному (has_one)
Один-ко-многим (has_many)
Принадлежность (belongs_to)
Многие-ко-многим (has_many "through")
Для того, чтобы указать связи связи в модели нужно указать их. Пример:
Class Model_Name extends ORM {
protected $_belongs_to /* указываем тип связи */ = array(
'[alias name]' => array(
'model' => '[model_name]',
'foreign_key' => '[column_name]',
)
);
}
Категория: Kohana