В этой статье продолжим подготовку Codeigniter к нормальной работе, а так же рассмотрим создание контроллера, отвечающего за функционал нашей AJAX корзины и модели, с помощью которой можно получать товары из БД.
Подготовка к работе Codeigniter
Давайте подведём к концу подготовку к работе с Codeigniter, чтобы больше на неё не отвлекаться.
В Codeigniter очень удобно устроена работа с URL адресами. Например, для просмотра страницы товара магазина на Codeigniter URL будет примерно таким:
http://magazine.ru/index.php/products/view/1
Сейчас в нём нас интересует следующая часть адреса: /index.php/products/view/1
. Codeigniter "видит" этот адрес так:
- Запустить скрипт index.php (от лежит в корне сайта).
- Найти контроллер с именем products.php.
- Вызвать метод view в контроллере с аргументом 1.
Подробнее можно почитать в официальной документации. Впринципе всё логично и удобно, но желательно избавиться от index.php
в строке адреса. Для этого в корне проекта необходимо создать файл .htaccess со следующим сожержимым:
.htaccess
RewriteEngine on
RewriteCond $1 !^(index\.php|images|assets|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Теперь все запросы будут перенаправляться файлу index.php автоматически и в строке адреса можно написать следующий URL:
http://magazine.ru/products/view/1
Теперь удалим из проекта все ненужные для работы файлы и папки. Смело можно удалять:
- Папку user_guide. В ней находится оффлайн версия документации к Codeigniter.
- Файл license.txt.
- Все остальные файлы в корне проекта, кроме index.php и .htaccess.
- Файл welcome.php в папке application/controllers. Это пример контроллера, выводящего страницу приветствия Codeigniter.
- Файл application/views/welcome_message.php. Это шаблон для вывода стартовой страницы Codeigniter.
У меня получилось следующее:
Ну и последним шагом будет добавление изображений товара. Я уже подготовил тестовые картинки для урока. Скачайте архив с изображениями и поместите их в папку /assets/img/.
На этом основные пункты подготовки Codeigniter к работе выполнены.
Контроллер корзины покупок
В предыдущей статье мы изменили контроллер по умолчанию на cart
, но его не существовало. Пришло время исправить это.
Создайте в новый файл cart.php в папке application/controllers и заполните стандартным шаблоном контроллера Codeigniter:
/application/controllers/cart.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Class Cart
* Контроллер реализует работу AJAX корзины
*
* http://nikitakiselev.ru/post/1
*/
class Cart extends CI_Controller
{
/**
* Метод-конструктор. Вызывается всмегда перед вызовом
* любого метода этого класса.
*/
public function __construct()
{
parent::__construct();
}
public function index()
{
}
}
/* End of file cart.php */
/* Location: ./application/controllers/cart.php */
Теперь заполним метод index()
следующим кодом:
public function index()
{
// Массив, в котором будут храниться товары
$products = array();
// Получение товаров из БД
$products = $this->cart_model->retrieve_products();
}
Что означает этот код?
В любом контроллере метод index()
вызывается по умолчанию, если в URL адресе не указан какой метод вызывать. Например URL адрес http://magazine.ru/products/ Codeigniter отработает следующим образом:
- найдет контроллер с именем products.php;
- так как не указан метод этого контроллера, вызовет метод
index()
.
В методе index()
сначала мы инициализируем переменную $products
как пустой массив. Затем в эту переменную получаем все товары магазина (их мы заполнили когда создавали таблицу ci_cart) с помощью модели cart_model, которую мы сейчас и создадим.
Создаём модель cart_model
Модели это классы PHP, которые предназначены для работы с информацией в базе данных. Например, если мы создаём свой блог на Codeigniter, то согласно архитектуре MVC, следует создать модель, которая будет вставлять, обновлять и удалять записи блога в базе данных. Все пользовательские файлы моделей хранятся в папке /application/models. Создадим там новый файл под названием cart_model.php и создадим в нём следующую структуру:
/application/models/cart_model.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* Class Cart_model
* Модельорганизовывает работу с товарам магазина
*/
class Cart_model extends CI_Model
{
//Конструктор класса
public function __construct()
{
parent::__construct();
}
}
/* End of file cart_model.php */
/* Location: ./application/models/cart_model.php */
Поясню код.
Мы создаём новый класс, который расширяет системный класс CI_Model
. Расширять класс в модели нужно всегда, чтобы получить доступ к стандартным методам Codeigniter.
В контроллере корзины покупок мы использовали метод retrieve_products()
из созданной нами только что модели. Давайте создадим этот метод.
/application/models/cart_model.php
/**
* Получает все товары магазина из БД
*/
public function retrieve_products()
{
//Получает все записи из таблицы products
$query = $this->db->get('products');
//Возвращает массив с записями в виде
// ассоциативного массива
return $query->result_array();
}
Модель создана, метод получения товаров из БД добавлен. Осталось подключить модель в контроллере Cart. Для этого в контроллере application/controllers/cart.php в функции конструктора класса нужно написать следующее:
public function __construct() {
parent::__construct();
//Подключение модели
$this->load->model('cart_model');
}
Подробнее почитать о моделях Codeigniter можно в соответствующем разделе документации по Codeigniter.
На этом этапе, если вы запустите ваш сайт, то в браузере должна быть белая страница, без ошибок. Если это так, то продолжим, если нет – прочитайте ошибку, вернитесь и просмотрите внимательно все пункты, возможно Вы что-то упустили. Так же пишите в комментариях о трудностях и непонятках, которые возникли во время повторения этой статьи.
Давайте отобразим на странице содержимое массива $products
, в который мы получали все товары из базы данных. Для этого в метод index()
основного контроллера (application/controllers/cart.php) допишем следующую строку:
print_r($products);
И перезагрузите страницу. На экране появится содержимое нашего массива с продуктами $products
:
Array ( [0] => Array ( [id] => 1 [name] => MacBook Pro [price] => 1199 [image] => macbookpro.jpg ) [1] => Array ( [id] => 2 [name] => MacBook Air [price] => 1499 [image] => macbookair.jpg ) [2] => Array ( [id] => 3 [name] => MacBook [price] => 999 [image] => macbook.jpg ) )
Т.к. информация в таком виде никуда не годится, нужно вывести её шаблонизатором Codeigniter, через views, но об этом в следующей статье.
Скачать исходные файлы урока.