CodeIgniter — это PHP-фреймворк с открытым исходным кодом и множеством функций. Недавно, благодаря последнему обновлению, в эту платформу была добавлена новая функция, называемая классом корзины . В этом уроке мы собираемся воспользоваться преимуществами этого нового класса и написать систему корзины покупок с добавлением jQuery.
Что такое CodeIgniter?
CodeIgniter — это мощный PHP-фреймворк с очень маленьким пространством, созданный для PHP-кодеров, которым нужен простой и элегантный инструментарий
создавать полнофункциональные веб-приложения. Если вы разработчик, который живет в реальном мире хостинга учетных записей и клиентов
с крайними сроками, и если вы устали от огромных и недокументированных фреймворков, CodeIgniter для вас!
В этом руководстве я использую последнюю стабильную версию CodeIgniter, V1.7.2. Это руководство требует от вас скромных знаний о CodeIgniter и шаблоне MVC . Следующие уроки помогут вам начать прямо сейчас!
- Все, что нужно, чтобы начать Бен Хейнс
- CodeIgniter с нуля: день 1 Джеффри Уэй
Ресурсы
Прежде чем мы сможем начать, нам нужно скачать CodeIgniter и jQuery. Нажмите здесь, чтобы загрузить CodeIgniter, и здесь, чтобы загрузить jQuery. Кроме того, вы можете ссылаться на jQuery через CDN Google: http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js «type =» text / javascript
Структура папок
Прежде чем мы начнем кодировать, я хотел бы создать прочную структуру для нашего приложения. Я предпочитаю перемещать папку application
из system
папки; это не обязательно, но
это облегчает процесс обновления в будущем.
Последняя папка, которую мы должны создать перед началом, это папка assets
; Здесь я храню свои изображения, Javascript, CSS и другие ресурсы.
Давайте посмотрим на окончательную структуру папок:
Внутри папки assets/js
мы размещаем наш файл jquery-1.3.2.min.js
и пустой файл с именем core.js
В этом файле мы напишем наш JavaScript.
И остается еще одна вещь: нам нужно создать нашу таблицу стилей. Поэтому создайте новый файл в assets/css
именем core.css
.
База данных
Мы собираемся извлечь наши продукты из базы данных; так что давайте перейдем к PHPMyAdmin и создадим таблицу с именем CI_Cart
.
И для тех из вас, кто хочет копировать и вставлять, код SQL …
1
2
3
4
5
6
7
|
CREATE TABLE `products` (
`id` int(128) NOT NULL auto_increment,
`name` varchar(128) NOT NULL,
`price` varchar(32) NOT NULL,
`image` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
Теперь давайте вставим некоторые данные в эту таблицу:
Опять же — для тех, кто предпочитает копировать и вставлять:
1
2
3
|
INSERT INTO `products` VALUES(1, ‘MacBook Pro’, ‘1199’, ‘macbookpro.jpg’);
INSERT INTO `products` VALUES(2, ‘MacBook Air’, ‘1499’, ‘macbookair.jpg’);
INSERT INTO `products` VALUES(3, ‘MacBook’, ‘999’, ‘macbook.jpg’);
|
В этом уроке есть все, что нужно сделать для нашей базы данных.
Шаг 1: Конфигурация приложения
Прежде чем мы сможем начать использовать CodeIgniter, мы должны настроить нашу конфигурацию. Откройте application/config/config.php
и измените следующее:
1
|
$config[‘base_url’] = «http://example.com»;
|
Замените http://example.com URL-адресом вашей установки. Затем найдите Global XSS Filtering
расположенную в нижней части файла config.php.
1
|
$config[‘global_xss_filtering’] = FALSE;
|
Давайте изменим FALSE на TRUE, чтобы сделать этот фильтр активным, когда встречаются данные GET, POST или COOKIE. Затем откройте application/config/database.php
и
введите информацию вашей базы данных.
1
2
3
4
5
|
$db[‘default’][‘hostname’] = «localhost»;
$db[‘default’][‘username’] = «root»;
$db[‘default’][‘password’] = «root»;
$db[‘default’][‘database’] = «CI_Cart»;
$db[‘default’][‘dbdriver’] = «mysql»;
|
Затем откройте application/config/routes.php
и измените контроллер по умолчанию на «корзину»:
1
|
$route[‘default_controller’] = «cart»;
|
Теперь, когда кто-то посещает URL вашего приложения, класс корзины будет загружен автоматически.
У нас есть еще один файл для редактирования, поэтому откройте application/config/autoload.php
и автоматически загрузите следующие компоненты:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/*
|
|
|
|
|
|
|
|
|
*/
$autoload[‘libraries’] = array(‘cart’, ‘database’);
/*
|
|
|
|
|
|
*/
$autoload[‘helper’] = array(‘url’, ‘form’);
|
Libraries
-
database
— позволяет приложению подключаться к базе данных и делает доступным класс базы данных. -
cart
— позволяет получить доступ к классу корзины покупок, больше информации.
Helpers
-
url
— библиотека url позволяет получить доступ к различным методам создания и получения ссылок, дополнительная информация -
form
— эта библиотека помогает нам в создании формы. Чтобы получить больше информации…
Шаг 2: Контроллер корзины
Мы изменили наш контроллер по умолчанию на «корзину», но этот контроллер еще не существует. Итак, создайте новый файл с именем application/controllers/cart.php
и добавьте
структура контроллера по умолчанию.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?php
class Cart extends Controller { // Our Cart class extends the Controller class
function Cart()
{
parent::Controller();
}
}
/* End of file cart.php */
/* Location: ./application/controllers/cart.php */
|
Теперь давайте создадим нашу индексную функцию. Это запустится автоматически, когда будет запрошена корзина классов.
1
2
3
4
|
function index()
{
$data[‘products’] = $this->cart_model->retrieve_products();
}
|
Так что здесь происходит? Хорошо, вы заметите, что мы присваиваем вывод нашего cart_model переменной с именем «$ data [‘products’]».
Если мы обновим нашу страницу, мы получим ошибку, потому что мы еще не сделали нашу cart_model.
Шаг 3: Создание нашей модели
What is a Model?
Модели — это классы PHP, предназначенные для работы с информацией в вашей базе данных. Например, допустим, вы используете CodeIgniter для управления блогом. Вы могли бы иметь
Класс модели, который содержит функции для вставки, обновления и получения данных вашего блога.
Модели создаются в следующей папке: application/models/
; Итак, давайте создадим наш файл модели с именем cart_model.php
и сделаем несколько правок.
1
2
3
4
5
6
7
8
|
<?php
class Cart_model extends Model { // Our Cart_model class extends the Model class
}
/* End of file cart_model.php */
/* Location: ./application/models/cart_model.php */
|
Это так просто; мы создали нашу модель. Важно, чтобы вы Cart_model
Model
, чтобы он работал правильно. Помните, когда мы вызывали нашу модель в функции index () нашего контроллера корзины? Мы вызвали функцию с именем retrieve_products
, так что давайте создадим это!
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?php
class Cart_model extends Model { // Our Cart_model class extends the Model class
// Function to retrieve an array with all product information
function retrieve_products(){
$query = $this->db->get(‘products’);
return $query->result_array();
}
}
/* End of file cart_model.php */
/* Location: ./application/models/cart_model.php */
|
Обновите страницу и посмотрите, что произойдет:
Мы создали нашу модель и вызвали функцию retrieve_products из нашего контроллера корзины, но мы забыли загрузить ее.
Существуют разные методы загрузки модели, но в этом уроке я собираюсь вызвать ее в функции конструкции, или в этом случае функцию корзины, расположенную в
верхняя часть нашего файла controllers/cart.php
.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?php
class Cart extends Controller { // Our Cart class extends the Controller class
function Cart()
{
parent::Controller();
$this->load->model(‘cart_model’);
}
}
/* End of file cart.php */
/* Location: ./application/controllers/cart.php */
|
Теперь проверьте это, напечатав массив.
1
2
3
4
5
|
function index()
{
$data[‘products’] = $this->cart_model->retrieve_products();
print_r($data[‘products’]);
}
|
Если все обработано правильно, вы должны увидеть следующее в вашем браузере.
Array ([0] => Array ([id] => 1 [name] => MacBook Pro [цена] => 1199 [image] => macbookpro.jpg) [1] => Массив ([id] => 2 [name] => MacBook Air [цена] => 1499 [image] => macbookair.jpg) [2] => Массив ([id] => 3 [name] => MacBook [цена] => 999 [image] => macbook.jpg))
Теперь, когда мы получили наш контент, мы должны отобразить его с помощью view
!
Шаг 4: Создание нашего представления
What is a View?
Представление — это просто веб-страница или фрагмент страницы, например верхний колонтитул, нижний колонтитул, боковая панель и т. Д.
Фактически, представления могут гибко встраиваться в другие представления (в другие представления и т. Д. И т. Д.), Если вам нужен этот тип иерархии.Представления никогда не вызываются напрямую, они должны быть загружены контроллером.
Помните, что в инфраструктуре MVC Контроллер действует как гаишник, поэтому он отвечает за выборку конкретного представления.
Откройте папку application/views
и создайте новый файл с именем index.php
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»>
<html xml:lang=»en-us» xmlns=»http://www.w3.org/1999/xhtml»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>CodeIgniter Shopping Cart</title>
<link href=»<?php echo base_url(); ?>assets/css/core.css» media=»screen» rel=»stylesheet» type=»text/css» />
<script type=»text/javascript» src=»<?php echo base_url(); ?>assets/js/jquery-1.3.2.min.js»></script>
<script type=»text/javascript» src=»<?php echo base_url(); ?>assets/js/core.js»></script>
</head>
<body>
<div id=»wrap»>
<?php $this->view($content);
</div>
</body>
</html>
|
Это будет наш основной шаблон. Как видите, мы загружаем наш jQuery и нашу таблицу стилей.
Потому что мы загрузили помощник по URL, «base_url ();» вернет URL в наше приложение.
Мы также загружаем представление, которое содержит переменную с именем $ content. Это позволяет нам динамически загружать контент. Если мы определим, что «$ content» — это «demo», представление
views/demo.php
будет загружен, например.
Шаг 5: Отправка данных в наше представление
На третьем шаге мы подготовили нашу индексную функцию и извлекли все продукты из базы данных, но мы еще не отправили данные в представление; так открыто
/application/controllers/cart.php
1
2
3
4
5
6
7
|
function index()
{
$data[‘products’] = $this->cart_model->retrieve_products();
$data[‘content’] = ‘cart/products’;
$this->load->view(‘index’, $data);
}
|
Как видите, мы установили переменную $ content в значение ‘cart / products.’ Мы еще не сделали эту точку зрения, поэтому давайте сделаем это сейчас.
Создайте новый файл в application/views/cart
и назовите его products.php. В этом файле мы отобразим данные, которые мы получили от нашей модели корзины. Мы собираемся
используйте несортированный список для отображения наших продуктов.
1
2
3
|
<ul class=»products»>
<li></li>
</ul>
|
Поскольку данные продукта возвращаются в массиве, мы должны использовать foreach для отображения всех продуктов.
1
2
3
4
5
6
|
<ul class=»products»>
<?php foreach($products as $p): ?>
<li>
</li>
<?php endforeach;?>
</ul>
|
Теперь, когда мы запустили цикл foreach, мы можем начать отображать данные о продукте.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<ul class=»products»>
<?php foreach($products as $p): ?>
<li>
<h3><?php echo $p[‘name’];
<img src=»<?php echo base_url(); ?>assets/img/products/<?php echo $p[‘image’]; ?>» alt=»» />
<small>€<?php echo $p[‘price’];
<?php echo form_open(‘cart/add_cart_item’);
<fieldset>
<label>Quantity</label>
<?php echo form_input(‘quantity’, ‘1’, ‘maxlength=»2″‘);
<?php echo form_hidden(‘product_id’, $p[‘id’]);
<?php echo form_submit(‘add’, ‘Add’);
</fieldset>
<?php echo form_close();
</li>
<?php endforeach;?>
</ul>
|
Давайте разберем вышеприведенный код на кусочки.
1
|
<h3><?php echo $p[‘name’];
|
Мы отображаем название продукта в теге H3.
1
|
<img src=»<?php echo base_url(); ?>assets/img/products/<?php echo $p[‘image’]; ?>» alt=»» />
|
Здесь мы используем функцию base_url, чтобы получить URL нашего приложения, а затем получить доступ к папке assets/img
.
Затем мы запрашиваем изображение товара из базы данных.
1
|
<small>€<?php echo $p[‘price’];
|
Мы отображаем цену товара, полученную из базы данных, и заключаем ее в маленькие теги.
1
2
|
<?php echo form_open(‘cart/add_cart_item’);
<fieldset>
|
Мы используем помощник по форме для создания тега открытия формы и устанавливаем действие «cart / add_cart_item».
1
2
3
4
|
<label>Quantity</label>
<?php echo form_input(‘quantity’, ‘1’, ‘maxlength=»2″‘);
<?php echo form_hidden(‘product_id’, $p[‘id’]);
<?php echo form_submit(‘add’, ‘Add’);
|
Это та часть, где пользователь может определить количество товаров, которое он / она хочет. Мы снова используем помощник формы, чтобы создать поле ввода с именем «количество» и установить значение по умолчанию «1». Мы также пропускаем некоторые дополнительные данные — в этом случае мы устанавливаем максимальную длину на «2».
Мы также поместили скрытое поле — снова с помощью помощника по форме — и назвали его «product_id».
Далее у нас есть кнопка отправки с именем «добавить» и значением по умолчанию «Добавить».
1
2
|
</fieldset>
<?php echo form_close();
|
Наконец, мы закрываем наш набор полей и форму. Теперь давайте добавим немного CSS!
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
body{
font-family: «Lucida Sans»;
font-size: 12px;
}
#wrap{
width: 1024px;
}
ul.products{
list-style-type: none;
width: 525px;
margin: 0;
padding: 0;
}
ul.products li{
background: #eeeeee;
border: 1px solid #d3d3d3;
padding: 5px;
width: 150px;
text-align: center;
float: left;
margin-right: 10px;
}
ul.products h3{
margin: 0;
padding: 0px 0px 5px 0px;
font-size: 14px;
}
ul.products small{
display: block;
}
ul.products form fieldset{
border: 0px;
}
ul.products form label{
font-size: 12px;
}
ul.products form input[type=text]{
width: 18px;
background: #FFF;
border: 1px solid #d3d3d3;
}
|
Я добавил три изображения в assets/img/products
, которые соответствуют именам из базы данных.
Шаг 6: добавление товара в корзину
Мы хотим добавлять товары в корзину с помощью jQuery, но мы также хотим, чтобы она работала для пользователей, у которых не включен JavaScript. Давайте assets/js/core.js
в наш файл JavaScript, assets/js/core.js
и начнем с открывающих тегов jQuery:
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / });
Поскольку CodeIgniter использует вид mod_rewrite URL-адреса «index.php / cart», мы собираемся определить переменную с URL-адресом для нашего приложения:
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) });
Не забудьте изменить его в соответствии с вашей ситуацией. Далее мы хотим посмотреть, отправляется ли какая-либо форма. Мы можем использовать функцию отправки jQuery, чтобы сделать это.
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) $ ("форма ul.products"). submit (function () { вернуть ложь; // Остановить браузер загрузки страницы, определенной в форме параметра «действие». }); });
Прежде чем мы сможем отправить данные с помощью jQuery, мы должны получить значения, которые мы должны отправить. Поэтому мы используем функцию поиска jQuery, чтобы найти нужные нам поля и получить их значения.
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) $ ("форма ul.products"). submit (function () { // Получить идентификатор продукта и количество var id = $ (this) .find ('input [name = product_id]'). val (); var qty = $ (this) .find ('вход [имя = количество]'). val (); вернуть ложь; // Остановить браузер загрузки страницы, определенной в форме параметра «действие». }); });
Если вы хотите проверить это, добавьте предупреждение и посмотрим, что произойдет.
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) $ ("форма ul.products"). submit (function () { // Получить идентификатор продукта и количество var id = $ (this) .find ('input [name = product_id]'). val (); var qty = $ (this) .find ('вход [имя = количество]'). val (); alert ('ID:' + id + '\ n \ rQTY:' + qty); вернуть ложь; // Остановить браузер загрузки страницы, определенной в форме параметра «действие». }); });
Так что работает отлично! Это означает, что мы можем начать отправку этих значений с помощью jQuery Post.
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) $ ("форма ul.products"). submit (function () { // Получить идентификатор продукта и количество var id = $ (this) .find ('input [name = product_id]'). val (); var qty = $ (this) .find ('вход [имя = количество]'). val (); $ .post (link + "cart / add_cart_item", {product_id: id, количество: qty, ajax: '1'}, Функция (данные) { // Взаимодействовать с возвращенными данными }); вернуть ложь; // Остановить браузер загрузки страницы, определенной в форме параметра «действие». }); });
В приведенном выше коде мы add_cart_item
данные на нашем контроллере cart
и запрашиваем функцию add_cart_item
. Это пример размещенных данных:
-
product_id
: 3 -
quantity
: 1 -
ajax
: 1
Помимо данных о продукте, вы можете видеть, что мы также отправляем через переменную с именем ajax со значением «1». Мы можем использовать это, чтобы проверить, включен ли пользователь JavaScript
или не. Потому что, когда он отключен, будет опубликован только product_id и количество.
Прежде чем мы сможем начать взаимодействовать с данными, возвращаемыми из нашего поста, мы должны создать функцию, которая возвращает данные. открыто
application/controllers/cart.php
и добавьте функцию с именем «add_cart_item»
01
02
03
04
05
06
07
08
09
10
11
12
13
|
function add_cart_item(){
if($this->cart_model->validate_add_cart_item() == TRUE){
// Check if user has javascript enabled
if($this->input->post(‘ajax’) != ‘1’){
redirect(‘cart’);
}else{
echo ‘true’;
}
}
}
|
В приведенном выше коде мы запускаем нашу функцию add_cart_item
. Далее мы используем if, чтобы проверить, если функция cart_model вызывает validate_add_cart_item()
возвращает истину. Нам все еще нужно создать эту функцию, но в конечном итоге она проверяет, существует ли продукт, а затем добавляет его в корзину. Мы рассмотрим это немного короче.
Теперь вы можете понять, почему мы добавили значение ajax
в jQuery Post. Если ajax не опубликован, это означает, что пользователь отключил JavaScript — это означает, что мы должны перезагрузить страницу
так что пользователь видит обновленную корзину. Если ajax опубликован, мы возвращаем значение true
, поэтому jQuery знает, что все обработано правильно.
Давайте двигаться дальше и создадим функцию validate_add_cart_item()
! Открыть application/models/cart_model.php
1
2
3
4
|
// Add an item to the cart
function validate_add_cart_item(){
// Validate posted data, and then add the item!
}
|
Сначала мы собираемся присвоить опубликованные данные локальной переменной.
1
2
3
4
5
6
7
|
// Add an item to the cart
function validate_add_cart_item(){
$id = $this->input->post(‘product_id’);
$cty = $this->input->post(‘quantity’);
}
|
Теперь пришло время проверить опубликованные данные и посмотреть, существует ли продукт.
01
02
03
04
05
06
07
08
09
10
|
// Add an item to the cart
function validate_add_cart_item(){
$id = $this->input->post(‘product_id’);
$cty = $this->input->post(‘quantity’);
$this->db->where(‘id’, $id);
$query = $this->db->get(‘products’, 1);
}
|
Мы создаем запрос и просим вернуть 1 result
если posted id
совпадает с id within the database
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
// Add an item to the cart
function validate_add_cart_item(){
$id = $this->input->post(‘product_id’);
$cty = $this->input->post(‘quantity’);
$this->db->where(‘id’, $id);
$query = $this->db->get(‘products’, 1);
// Check if a row has matched our product id
if($query->num_rows > 0){
// We have a match!
}else{
// Nothing found!
return FALSE;
}
}
|
Если ничего не найдено, мы возвращаем false. Если совпадение найдено, мы добавляем товар в корзину.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// Add an item to the cart
function validate_add_cart_item(){
$id = $this->input->post(‘product_id’);
$cty = $this->input->post(‘quantity’);
$this->db->where(‘id’, $id);
$query = $this->db->get(‘products’, 1);
// Check if a row has matched our product id
if($query->num_rows > 0){
// We have a match!
foreach ($query->result() as $row)
{
// Create an array with product information
$data = array(
‘id’ => $id,
‘qty’ => $cty,
‘price’ => $row->price,
‘name’ => $row->name
);
// Add the data to the cart using the insert function that is available because we loaded the cart library
$this->cart->insert($data);
return TRUE;
}
}else{
// Nothing found!
return FALSE;
}
}
|
Прежде чем мы сможем использовать jQuery для перезагрузки корзины, мы должны создать список корзины.
Шаг 7: Создание представления корзины
Сначала давайте откроем application/views/index.php
и добавим div для нашей корзины.
01
02
03
04
05
06
07
08
09
10
11
|
<div id=»wrap»>
<?php $this->view($content);
<div class=»cart_list»>
<h3>Your shopping cart</h3>
<div id=»cart_content»>
<?php echo $this->view(‘cart/cart.php’);
</div>
</div>
</div>
|
Выше мы создали div с именем cart_list
и внутри div с идентификатором cart_content
. Теперь внутри div cart_content мы собираемся загрузить другое представление
называется cart.php
.
Создайте новый файл в application/views/cart/
и назовите его cart.php
. Добавьте следующий код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?php if(!$this->cart->contents()):
echo ‘You don\’t have any items yet.’;
else:
?>
<?php echo form_open(‘cart/update_cart’);
<table width=»100%» cellpadding=»0″ cellspacing=»0″>
<thead>
<tr>
<td>Qty</td>
<td>Item Description</td>
<td>Item Price</td>
<td>Sub-Total</td>
</tr>
</thead>
<tbody>
<?php $i = 1;
<?php foreach($this->cart->contents() as $items): ?>
<?php echo form_hidden(‘rowid[]’, $items[‘rowid’]);
<tr <?php if($i&1){ echo ‘class=»alt»‘;
<td>
<?php echo form_input(array(‘name’ => ‘qty[]’, ‘value’ => $items[‘qty’], ‘maxlength’ => ‘3’, ‘size’ => ‘5’));
</td>
<td><?php echo $items[‘name’];
<td>€<?php echo $this->cart->format_number($items[‘price’]);
<td>€<?php echo $this->cart->format_number($items[‘subtotal’]);
</tr>
<?php $i++;
<?php endforeach;
<tr>
<td</td>
<td></td>
<td><strong>Total</strong></td>
<td>€<?php echo $this->cart->format_number($this->cart->total());
</tr>
</tbody>
</table>
<p><?php echo form_submit(», ‘Update your Cart’);
<p><small>If the quantity is set to zero, the item will be removed from the cart.</small></p>
<?php
echo form_close();
endif;
?>
|
Это довольно немного кода; давайте разбить его на разные части.
1
2
3
4
|
<?php if(!$this->cart->contents()):
echo ‘You don\’t have any items yet.’;
else:
?>
|
Мы используем if, чтобы проверить, содержит ли корзина какой-либо контент. Если в корзине нет содержимого, отображается сообщение «У вас еще нет товаров». Если
корзина не пуста, мы запустим остаток кода.
01
02
03
04
05
06
07
08
09
10
|
<?php echo form_open(‘cart/update_cart’);
<table width=»100%» cellpadding=»0″ cellspacing=»0″>
<thead>
<tr>
<td>Qty</td>
<td>Item Description</td>
<td>Item Price</td>
<td>Sub-Total</td>
</tr>
</thead>
|
Затем мы создаем наш открытый тег формы с помощью помощника по форме и устанавливаем параметр action cart/update_cart
. Мы также создали таблицу с заголовком таблицы и
добавлены поля Количество, Описание товара, Цена товара и Общая сумма.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<tbody>
<?php $i = 1;
<?php foreach($this->cart->contents() as $items): // We break the cart contents into parts ?>
<?php echo form_hidden(‘rowid[]’, $items[‘rowid’]);
<tr <?php if($i&1){ echo ‘class=»alt»‘;
<td>
<?php echo form_input(array(‘name’ => ‘qty[]’, ‘value’ => $items[‘qty’], ‘maxlength’ => ‘3’, ‘size’ => ‘5’));
</td>
<td><?php echo $items[‘name’];
<td>€<?php echo $this->cart->format_number($items[‘price’]);
<td>€<?php echo $this->cart->format_number($items[‘subtotal’]);
</tr>
<?php $i++;
<?php endforeach;
<tr>
<td</td>
<td></td>
<td><strong>Total</strong></td>
<td>€<?php echo $this->cart->format_number($this->cart->total());
</tr>
</tbody>
|
What is a Row ID?
Идентификатор строки — это уникальный идентификатор, который генерируется кодом корзины при добавлении товара в корзину.
Причина создания уникального идентификатора заключается в том, что корзина может управлять одинаковыми продуктами с разными параметрами.Например, давайте представим, что кто-то покупает две одинаковые футболки (один и тот же идентификатор продукта), но разных размеров. Идентификатор продукта (и другие атрибуты)
быть одинаковыми для обоих размеров, потому что это одна и та же рубашка. Единственная разница будет в размере. Поэтому корзина должна иметь средства идентификации
эта разница, так что два размера рубашек можно управлять независимо. Это достигается путем создания уникального «идентификатора строки» на основе идентификатора продукта и
любые варианты, связанные с этим.
1
2
3
4
5
6
7
8
|
</table>
<p><?php echo form_submit(», ‘Update your Cart’);
<p><small>If the quantity is set to zero, the item will be removed from the cart.</small></p>
<?php
echo form_close();
endif;
?>
|
Наконец, мы закрываем таблицу и создаем ссылку, используя функцию привязки к cart/emtpy_cart
. Создадим пустую корзину
функция в ближайшее время.
Обновите страницу и посмотрите:
Мы не указывали jQuery обновлять корзину покупок при нажатии кнопки « Add
. Но мы можем проверить это с помощью FireBug. Нажмите «Добавить» и просмотрите, что происходит:
Как видите, jQuery cart/add_cart_item
данные в cart/add_cart_item
; Теперь давайте посмотрим, каков ответ.
ИСТИНА возвращается, поэтому обновите страницу, и у вас должен быть товар в корзине.
Теперь, когда это работает, давайте перейдем к jQuery и обновим корзину, когда товар добавлен в корзину.
Шаг 8: Обновление корзины
Помните, что мы закончили с:
$ (документ) .ready (function () { / * разместить здесь действия jQuery * / var link = "/tutorials/CodeIgniter_Shopping_Cart/demo/index.php/"; // URL вашего приложения (включая index.php /) $ ("форма ul.products"). submit (function () { // Получить идентификатор продукта и количество var id = $ (this) .find ('input [name = product_id]'). val (); var qty = $ (this) .find ('вход [имя = количество]'). val (); $ .post (link + "cart / add_cart_item", {product_id: id, количество: qty, ajax: '1'}, Функция (данные) { // Взаимодействовать с возвращенными данными }); вернуть ложь; // Остановить браузер загрузки страницы, определенной в форме параметра «действие». }); });
Теперь пришло время взаимодействовать с возвращенными данными, в данном случае «истина» или «ложь».
$ .post (link + "cart / add_cart_item", {product_id: id, количество: qty, ajax: '1'}, Функция (данные) { if (data == 'true') { } Еще { оповещение («Товар не существует»); } });
Используя условие if, мы можем обновить корзину, если возвращается значение true, или дать предупреждение, когда продукт, который пытается добавить пользователь, не существует.
$ .post (link + "cart / add_cart_item", {product_id: id, количество: qty, ajax: '1'}, Функция (данные) { if (data == 'true') { $ .get (link + "cart / show_cart", function (cart) {// Получить содержимое url cart / show_cart $ ( "# Cart_content") HTML (корзина). // Заменим информацию в div #cart_content полученными данными }); } Еще { оповещение («Товар не существует»); } });
Когда true возвращено, мы используем jQuery «get», чтобы загрузить url cart/show_cart
, и мы заменяем div #cart_content данными, возвращаемыми этим url.
Но вы можете заметить, что функция show_cart
еще не существует; давайте создадим это сейчас, открыв наше application/controllers/cart.php
Это очень простое решение. Нам просто нужно вернуть содержимое корзины, создать функцию и вернуть представление views/cart/cart.php
1
2
3
|
function show_cart(){
$this->load->view(‘cart/cart’);
}
|
Обновите страницу и попробуйте добавить еще один элемент. JQuery должен добавить его без перезагрузки страницы. (Если, конечно, у вас не отключен JavaScript)
Шаг 9: Обновить корзину
Осталось всего несколько шагов! Когда у вас есть товары в вашей корзине, нажмите «Обновить» и посмотрите, что на самом деле публикуется:
Как видите, rowid уникален для каждого товара в корзине. Мы собираемся использовать эти идентификаторы, чтобы проверить, какой элемент должен быть обновлен.
Откройте application/controllers/cart.php
и добавьте функцию update_cart
.
1
2
3
4
|
function update_cart(){
$this->cart_model->validate_update_cart();
redirect(‘cart’);
}
|
Опять же, мы используем модель для обработки данных. После этого мы обновляем страницу пользователя. Откройте application/models/cart_model.php
и создайте новый
функция называется validate_update_cart
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// Updated the shopping cart
function validate_update_cart(){
// Get the total number of items in cart
$total = $this->cart->total_items();
// Retrieve the posted information
$item = $this->input->post(‘rowid’);
$qty = $this->input->post(‘qty’);
// Cycle true all items and update them
for($i=0;$i < $total;$i++)
{
// Create an array with the products rowid’s and quantities.
$data = array(
‘rowid’ => $item[$i],
‘qty’ => $qty[$i]
);
// Update the cart with the new information
$this->cart->update($data);
}
}
|
Как видите, сначала мы назначаем общее количество товаров в нашей корзине локальной переменной $ total.
Затем мы присваиваем опубликованные rowid и количества локальным переменным.
Мы используем for
циклического перебора всех элементов, пока $ i не станет равным $ total — это гарантирует, что все элементы будут обновлены.
При циклическом перемещении по разнесенным позициям мы создаем массив с разнесенным идентификатором и количеством Когда массив создан, мы обновляем эту информацию, используя
функция библиотеки корзины называется update.
Попробуйте и посмотрите, обновляются ли элементы!
Шаг 10: Пустая корзина
Наш последний шаг! Мы должны создать функцию для очистки нашей корзины. Снова откройте application/controllers/cart.php
и создайте функцию с именем empty_cart.
1
2
3
4
|
function empty_cart(){
$this->cart->destroy();
redirect(‘cart’);
}
|
Добавьте немного jQuery к этому! Откройте assets/js/core.js
и напишите следующее:
$ (". empty"). live ("click", function () { $ .get (link + "cart / empty_cart", function () { $ .get (ссылка + "корзина / show_cart", функция (корзина) { $ ( "# Cart_content") HTML (корзина). }); }); вернуть ложь; });
Наша ссылка «Emtpy Cart» имеет класс .empty; поэтому мы прикрепляем к нему функцию щелчка без проблем. Вы можете заметить, что мы используем живую функцию jQuery.
Мы должны использовать это, чтобы заставить это работать. Если мы пропустили это, и вы добавили товар в корзину, а затем нажали пустую корзину, это не сработает.
После нажатия на ссылку мы используем тот же код, что и в функции корзины обновлений. Сначала мы получаем URL-адрес empty_cart, чтобы наша корзина была пустой, а затем просто извлекаем новое содержимое корзины и помещаем этот контент в наш div #cart_content.
Выполнено!
Я надеюсь, вам понравился этот урок! Если вы сделали, пожалуйста, сообщите нам об этом в комментариях!
- Подпишитесь на нас в Твиттере или подпишитесь на ленту Nettuts + RSS для получения лучших учебных материалов по веб-разработке. готов
Готовы поднять свои навыки на новый уровень и начать зарабатывать на своих скриптах и компонентах? Проверьте наш родной рынок, CodeCanyon .