15 Май 2011

Kohana 3.1. Видеоурок 18-1

18-й видеоурок по программирование на Kohana

Приветствую уважаемого читателя!

18-й видеоурок, из-за объемности материала, пришлось разделить на две подчасти. А из-за логичности изложения обе подчасти будут все же единым 18-м видеоуроком.

План всего 18-го видеоурока:

  • Разработка модели «Материал»
  • Связь материала с категорией
  • Вывод материала заданной категории

Постановка задачи

  • Материал – это просто текст, хранящийся в базе данных.
  • Каждый материал закреплен за отдельной категорией.
  • В одной категории может быть несколько материалов.
  • Есть страница, на которой, в виде дерева, перечислены все категории сайта. Название каждой категории – ссылка, открывающая страницу с материалами выбранной категории.

Решение поставленной задачи

  • Каждая категория должна иметь отдельный URL для перехода на страницу с материалами вида http://kohana/materials/category/cat_name
  • Отдельная модель «Materials» будет решать все задачи по работе с сущностью «Материалы обр. системы».

Доработка модели Category и таблицы Tree

В таблицу БД tree, к каждой из категорий, необходимо добавить дополнительное поле URL для хранения параметра cat_name.

Значение поля URL будет вводится при создании категории администратором сайта.

Любое получаемое от пользователя значение должно быть подвергнуто валидации, тем более, в нашем случае оно участвует в формировании URL.

Поле URL должно соответствовать следующим требованиям:

  • не пустое;
  • содержать только латинские буквы и цифры;
  • максимальное количество символов не должно превышать ограничение поля в таблице БД;
  • должно быть уникальным.

Валидационные правила должны выглядеть следующим образом:

$validation->rule('url', 'not_empty');
$validation->rule('url', 'alpha_numeric');
$validation->rule('url', 'max_length', array(':value', '200'));
$validation->rule('url', array($this, 'unique_url'));

Функция callback для проверки на уникальность поля url ('unique_url'):

public function unique_url($url)
{
	return ! DB::select(array(DB::expr('COUNT(url)'), 'total'))
		->from($this->tableName)
		->where('url', '=', $url)
		->execute()
		->get('total');
}

Первая подчасть посвящена доработке модели категорий и базы данных с целью внедрения дополнительного параметра категории – названия, участвующего в URL.

Видеоурок 18-1:

Скачать видеоурок 18-1 (*.wmv, 34.3 МБ)

Исходники (*.zip, 1.14 МБ)

SQL-дамп (*.sql, 6.05 кБ)

<< Предыдущий видеоурок курса Следующий видеоурок курса >>

С уважением, Андрей Морковин.