Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ WEB Разработка ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

FreeBSD and Nix

Общая

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Codeigniter: shopping cart - корзина товаров


Класс Корзины (Shopping Cart)
Класс корзины позволяет добавлять элементы в сессию, которая остается активной, пока пользователь посещает ваш сайт. Элементы могут быть получены и отображены в стандартном формате "корзины", позволяя пользователям изменять количество и удалять элементы из корзины.
Пожалуйста обратите внимание, что класс Cart предоставляет только базовую функциональность. Он не поддерживает доставку, авторизацию кредитных карт и другие компоненты процессинга.
Инициализация класса
Важно: Класс Cart использует класс Session для сохранения информации корзины в БД, поэтому перед использованием класса Cart вы должны создать таблицу в БД, как описано в документации класса Session, и установить настройки сессий в вашем файле application/config/config.php, чтобы использовать базу данных.
Чтобы инициализировать класс Cart в конструкторе контроллера, используйте функцию $this->load->library:

$this->load->library('cart');

Загруженный объект класса доступен к использованию через: $this->cart

Добавление элемента в корзину
Чтобы добавить элемент в корзину, просто передайте массив с информацией о продукте в функцию $this->cart->insert(), как показано ниже:

$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);

$this->cart->insert($data); 

Обновление корзины
Чтобы обновить информацию в вашей корзине, вы должны передать массив, содержащий Row ID (идентификатор строки) и количество функции $this->cart->update():

$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);

$this->cart->update($data); 

// Или многомерный массив

$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);

$this->cart->update($data); 

Что такое Row ID (идентификатор строк)? Row ID это уникальный идентификатор, который генерируется кодом корзины при добавлении элемента. Смысл использования уникального идентификатора в том, что это позволяет корзине работать с идентичными продуктами, но с различными опциями.

Например, давайте предположим, что кто-то покупает две одинаковые майки (один и тот-же идентификатор продукта), но с разными размерами. Идентификатор продукта (и другие атрибуты) будут одинаковыми для обоих размеров, так как это одна и та-же майка. Различие только в размере. Корзина должна учитывать это различие, идентифицировать их как разные позиции, чтобы позволить независимое управление элементами заказа. Это возможно благодаря уникальному "row ID" (идентификатору строки), основанному на идентификаторе продукта и других опциях, ассоциированных с ним.

В большинстве случаев обновление корзины будет происходить, когда пользователь будет что-то делать на странице корзины, поэтому маловероятно, что разработчику когда-то придется делать что-то с "Row ID", поэтому просто позаботьтесь о том, чтобы скрытое поле присутствовало на странице, и данные из него передавались в контроллер. Пожалуйста рассмотрите конструкцию отображения корзины для более подробной информации.

Справка по функциям
$this->cart->insert();
Позволяет вам добавить элементы в корзину, как объяснено выше.
$this->cart->update();
Позволяет вам обновить элементы в корзине, как показано выше.
$this->cart->total();
Возвращает полную стоимость корзины.
$this->cart->total_items();
Возвращает суммарное количество элементов в корзине.
$this->cart->contents();
Возвращает массив с содержимым корзины.
$this->cart->has_options(rowid);
Возвращает TRUE, если указанная строка есть в корзине. Эта функция разработана, чтобы использоваться в цикле с $this->cart->contents(), поэтому вы должны передать rowid этой функции, как показано выше, в примере отображения корзины.
$this->cart->product_options(rowid);
Возвращает массив опций для конкретного продукта. Эта функция разработана, чтобы использоваться в цикле с $this->cart->contents(), поэтому вы должны передать rowid этой функции, как показано выше, в примере отображения корзины.
$this->cart->destroy();
Позволяет вам удалить корзиину. Эта функция может быть вызвана, к примеру, когда покупатель оформил заказ.

Пример:

У меня в базе данных есть табличка с несколькими товарами.
Таблица в моем случае "products" с полями id,title,price

Так-же требуется загрузить библиотеку сессий. в config.php пример: $config['encryption_key'] = '123456';

Еще в autoload.php:

$autoload['libraries'] = array('database','pagination','cart','session');
$autoload['helper'] = array('url');


Выборка товаров из базы осуществляется моделью cart_model.php

<?php
class Cart_model extends CI_Model {
    
    function get()
    {
        $query = $this->db->get('products');
        return $query->result_array();
    }
     
}   

Далее напишем виды для отображения:

cart.php - сама корзина

<html>
<head>
<title></title>
</head>

<body>
<?php echo form_open('blog/update'); ?>

<table cellpadding="4" cellspacing="0" style="width:500px" border="1" align="center">

<tr>
  <th>Title</th>
  <th>QTY</th>
  <th>Price</th>
</tr>

<?php $i = 1; foreach($this->cart->contents() as $items): ?>

    <?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>

    <tr>
      <td><?php echo $items['title']; ?></td>
      <td>
      <?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '1', 'size' => '3')); ?>     
      </td>
      <td>$<?php echo $this->cart->format_number($items['price']); ?></td>
    </tr>

<?php $i++; endforeach; ?>

<tr>
  <td><a href="<?=base_url();?>index.php/blog/clear_cart">Clear Cart</a></td>
  <td><strong>Total</strong></td>
  <td>$<?php echo $this->cart->format_number($this->cart->total()); ?></td>
</tr>

</table>
<p align="center"><input type="submit" name="update" value="Refresh Cart" /></p>
</body>
</html>

info.php - страничка пустой корзины

<html>
<head>
<title></title>
</head>

<body>
Cart - empty
</body>
</html>

products.php - вывод товаров:

<html>
<head>
<title></title>
</head>
<body>

<?php foreach($goods as $item):?>

<p><strong>Goods name:</strong> <?=$item['title'];?></p>
<p><strong>Goods price:</strong> <?=$item['price'];?></p><br />

<form method="post" action="<?=base_url();?>index.php/blog/add_product/<?=$item['id'];?>">
<input type="hidden" name="id" value="<?=$item['id'];?>" />
<input type="hidden" name="title" value="<?=$item['title'];?>" />
<input type="hidden" name="price" value="<?=$item['price'];?>" />
<input type="submit" name="cart" value="Add to cart" />
</form>

<?php endforeach;?>
<a href="<?=base_url();?>index.php/blog/view_cart">To cart</a>

</body>
</html>

Тепрь склеем все это с помощью контроллера:
blog.php

<?php
class Blog extends CI_Controller {
  
    function index()
    {
        $this->load->model('cart_model');
        
        //Выборка товаров из БД
        $data['goods'] = $this->cart_model->get();
        
        $this->load->view('products',$data);
    }
    
    //Добавляем товар в корзину
    function add_product($id)
    {                
        if(isset($_POST['cart']))
        {        
            $data = array(
               'id'      => $this->input->post('id'),
               'qty'     => 1,
               'price'   => $this->input->post('price'),
               'title' => $this->input->post('title'),
               'name' => $this->input->post('title')
            );
            
            //Возвращаемся на страницу списка товаров после добавления товара в корзину
            $this->cart->insert($data);
            redirect('blog');
        }
        else
        {
            $this->load->view('products');
        }         
    }
    
     //Корзина
    function view_cart()
    {
        if($this->cart->total_items() == 0)
        {
            //Если корзина пуста
            $this->load->view('info');
        }
        else
        {
            //Если корзина не пуста
            $this->load->helper('form');
            $this->load->view('cart');
        }       
    }
    
    //Обновление корзины
    function update()
    {
       for ($i = 1; $i <= $this->cart->total_items(); $i++)
       {
            $item = $this->input->post($i);
            
            $data = array(
                    'rowid' => $item['rowid'], 
                    'qty' => $item['qty']
            );
            $this->cart->update($data);
       }
       redirect('blog/view_cart');
    }
    
    //Очистка корзины
    function clear_cart()
    {
        $this->cart->destroy();
        redirect('blog/view_cart');
    }
    
    
    
    
}    

И проверим http://site/index.php/blog/


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект