Implementación de carro de compras en CodeIgniter

El carrito de compras es una parte vital de cada aplicación de comercio electrónico que permite al usuario seleccionar artículos para comprar. Ayuda a los clientes en línea a comprar varios artículos a la vez. Al finalizar la compra, el carrito de compras calcula el monto total del pedido, se encarga del envío y muestra la vista previa del pedido. El principal desafío del desarrollo de sitios web de comercio electrónico es la implementación del carrito de compras.
La SESIÓN se utiliza para construir el carrito de compras en PHP . Si su aplicación está desarrollada con CodeIgniter, un carrito de compras se puede integrar fácilmente con Cart Class. CodeIgniter proporciona una biblioteca de carro que ayuda a integrar la funcionalidad del carrito de compras en el marco de CodeIgniter. En este tutorial, le mostraremos cómo implementar el carrito de compras en CodeIgniter .
Este tutorial de carro de la compra muestra el proceso de compra y pago en la aplicación CodeIgniter 3. En el script de ejemplo, la biblioteca de Cartas de CodeIgniter se usará para implementar la funcionalidad de la carreta central. Además, la información del cliente y del pedido se almacenará en la base de datos MySQL.
Antes de comenzar, eche un vistazo a la estructura de archivos del Carrito de compras CodeIgniter .
codeigniter-shopping-cart-checkout-files-structure-codexworld

Crear tablas de base de datos

Para almacenar la información de productos, clientes y pedidos, es necesario crear algunas tablas en la base de datos.
El siguiente SQL crea una productstabla en la base de datos MySQL.
CREATE  TABLE  `products` (
  ` id`  int ( 11 ) NOT  NULL AUTO_INCREMENT,
  `image`  varchar ( 255 ) COLLATE utf8_unicode_ci NOT  NULL ,
  ` name`  varchar ( 255 ) COLLATE utf8_unicode_ci NOT  NULL ,
  `description`  text  COLLATE utf8_unicode_ci NOT  NULL ,
  `precio`  flotador ( 10 , 2 ) NO NULL ,
  `created` datetime NOT  NULL ,
  ` modified` datetime NOT  NULL ,
  `status` enum ( '1' , '0' ) COLLATE utf8_unicode_ci NOT  NULL  DEFAULT  '1'  COMMENT  '1 = Active | 0 = Inactivo ' ,LLAVE 
 PRIMARIA ( `id` )
) MOTOR = InnoDB  DEFAULT  CHARSET = utf8 COLLATE = utf8_unicode_ci;
El siguiente SQL crea una customerstabla en la base de datos MySQL.
CREAR  TABLA  `clientes` (
  ` id`  int ( 11 ) NOT  NULL AUTO_INCREMENT,
  `name`  varchar ( 50 ) COLLATE utf8_unicode_ci NOT  NULL ,
  ` email`  varchar ( 50 ) COLLATE utf8_unicode_ci NOT  NULL ,
  `phone  varchar ( 15 ) COLLATE utf8_unicode_ci NOT  NULL ,
  `address`  varchar ( 255 )COLLATE utf8_unicode_ci NOT  NULL ,
  `created` datetime NOT  NULL ,
  ` modified` datetime NOT  NULL ,
  `status` enum ( '1' , '0' ) COLLATE utf8_unicode_ci NOT  NULL  DEFAULT  '1'  COMMENT  '1 = Active | 0 = Inactivo ' ,LLAVE 
 PRIMARIA ( `id` )
) MOTOR = InnoDB  DEFAULT  CHARSET = utf8 COLLATE = utf8_unicode_ci;
El siguiente SQL crea una orderstabla en la base de datos MySQL.
CREATE  TABLE  `ordenes` (
  ` id`  int ( 11 ) NOT  NULL AUTO_INCREMENT,
  `customer_id`  int ( 11 ) NOT  NULL ,
  ` grand_total`  float ( 10 , 2 ) NOT  NULL ,
  `created` datetime NOT  NULL ,
  ` modified` datetime NOT  NULL ,
  `status` enum ( '1' , '0' ) COLLATE utf8_unicode_ciNO  NULO  POR DEFECTO  '1'  COMENTARIO  '1 = Activo | 0 = Inactivo ' ,
 PRIMARIA CLAVE ( `id` ),
  KEY  ` customer_id` ( `customer_id` ),
  CONSTRAINT  ` orders_ibfk_1` EXTERIOR KEY ( `customer_id` ) Referencias  ` `de los clientes ( ` id` ) EN  DELETE  CASCADE  EN  ACTUALIZACIÓN  NO  ACCIÓN 
) MOTOR = InnoDB  DEFAULT  CHARSET = utf8 COLLATE = utf8_unicode_ci;
El siguiente SQL crea una order_itemstabla en la base de datos MySQL.
CREAR  TABLA  `order_items` (
  ` id`  int ( 11 ) NOT  NULL AUTO_INCREMENT,
  `order_id`  int ( 11 ) NOT  NULL ,
  ` product_id`  int ( 11 ) NOT  NULL ,
  `cantidad`  int ( 5 ) NOT  NULL ,
  ` sub_total`  float ( 10 , 2 ) NOT  NULL ,
 PRIMARIA CLAVE ( `id` ),
  KEY  ` order_id` ( `order_id` ),
  CONSTRAINT  ` order_items_ibfk_1` EXTERIOR KEY ( `order_id` ) Referencias  ` orders` ( `id` ) EN  DELETE  CASCADE  EN  ACTUALIZACIÓN  NO  ACCIÓN 
) MOTOR = InnoDB  DEFAULT  CHARSET = utf8 COLLATE = utf8_unicode_ci;

Config

autoload.php
Especifique alguna biblioteca útil y ayudante para cargar de forma predeterminada.
$ autoload [ ' library ' ] = array ( 'database' 'session' ); 

$ autoload [ 'helper' ] = array ( 'url' );

Controladores

Los siguientes controladores se utilizan para manejar el carrito de la compra, el proceso de pago y el proceso de envío de pedidos.
Products.php
El controlador de Productos contiene 3 funciones, __construct (), index () y addToCart ().
  • __construct () - Cargar biblioteca de carro y modelo de producto.
  • índice () -
    • Obtener los productos de la base de datos utilizando la getRows()función del modelo del producto.
    • Pase los datos de productos para ver y cargar la vista de lista de productos.
  • addToCart () -
    • Obtener datos de un producto específico por ID.
    • Añadir producto al carrito mediante el insert()método de clase de carrito.
<? php 
defined ( 'BASEPATH' ) O exit ( 'No se permite el acceso directo al script' ); 

la clase  Productos se  extiende a  CI_Controller { 
    
    function   __construct () { 
        parent :: __construct (); 
        
        // Cargar biblioteca de carro 
        $ esto -> cargar -> biblioteca ( 'carro' ); 
        
        // Cargar modelo de producto 
        $ this -> load -> model ( 'producto' ); 
    } 
    
índice de     función  () { 
        $ data  = array ();
        
        // Fetch productos de la base 
        de datos $ data [ 'products' ] =  $ this -> product -> getRows (); 
        
        // Cargar la vista de lista de productos 
        $ this -> load -> view ( 'products / index' $ data ); 
    } 
    
    function  addToCart ( $ proID ) { 
        
        // Fetch producto específico por ID 
        $ product  $ this -> product -> getRows ( $ proID ); 
        
        // Añadir producto al carrito 
        $ data  = array (
            'id'     =>  $ product [ 'id' ], 
            'qty'     =>  1 , 
            'price'     =>  $ product [ 'price' ], 
            'name'     =>  $ product [ 'name' ], 
            'image'  = >  $ producto [ 'imagen' ] 
        ); 
        $ this -> cart -> insert ( $ data ); 
        
        // Redireccionar a la página del carrito 
        redirigir ( 'carrito /' ); 
    } 
    
}
Cart.php
El controlador de Cart contiene 4 funciones, __construct (), index (), updateItemQty () y removeItem ().
  • __construct () - Cargar biblioteca de carro y modelo de producto.
  • índice () -
    • Recupere los datos del carrito de la sesión utilizando el contents()método de la clase de carrito.
    • Pase el contenido del carrito para ver y cargar la vista del carrito.
  • updateItemQty () : este método llamado por la solicitud jQuery Ajax para actualizar la cantidad del artículo del carrito.
    • Basado en el rowid, actualice la cantidad del artículo usando el update()método de la clase de carrito.
  • removeItem () : este método se utiliza para eliminar el artículo del carrito.
    • Según el rowid, elimine el artículo del carrito utilizando el remove()método de clase de carrito.
<? php 
defined ( 'BASEPATH' ) O exit ( 'No se permite el acceso directo al script' ); 

el carro de la  clase  extiende el  controlador_CIN { 
    
    función   __construct () { 
        parent :: __construct (); 
        
        // Cargar biblioteca de carro 
        $ esto -> cargar -> biblioteca ( 'carro' ); 
        
        // Cargar modelo de producto 
        $ this -> load -> model ( 'producto' ); 
    } 
    
índice de     función  () { 
        $ data  = array ();
        
        // Recuperar datos del carrito de la sesión 
        $ data [ 'cartItems' ] =  $ this -> cart -> contents (); 
        
        // Cargar la vista del carrito 
        $ this -> load -> view ( 'cart / index' $ data ); 
    } 
    
    function  updateItemQty () { 
        $ update  0 ; 
        
        // Obtener información del artículo del carrito 
        $ rowid  $ this -> input -> get ( 'rowid' ); 
        $ qty  $ esto ->entrada -> obtener ( 'qty' ); 
        
        // Actualizar el artículo en el carrito 
        si (! Empty ( $ rowid ) &&! Empty ( $ qty )) { 
            $ data  = array ( 
                'rowid'  =>  $ rowid , 
                'qty'    =>  $ qty 
            ); 
            $ update  $ this -> cart -> update ( $ data ); 
        } 
        
        // Volver respuesta 
        echo  $ update ? 'ok' : 'err' ; 
    } 
    
    function  removeItem ( $ rowid) { 
        // Eliminar artículo del carrito 
        $ remove  $ this -> carrito -> remove ( $ rowid ); 
        
        // Redireccionar a la página del carrito 
        redirigir ( 'carrito /' ); 
    } 
    
}
Checkout.php
El controlador de Productos contiene 4 funciones, __construct (), index (), placeOrder () y orderSuccess ().
  • __construct () - Cargar biblioteca de formularios y ayudante, biblioteca de carro y modelo de producto.
  • índice () -
    • Redirigir al usuario si el carrito está vacío.
    • Si la solicitud de pedido es enviada:
      • Valide los datos de formularios enviados con la biblioteca de validación de formularios.
      • Inserte los datos del cliente en la base de datos.
      • Insertar datos de orden en la base de datos usando la placeOrder()función.
      • Redirigir a la página de éxito de la orden.
    • Recupere los datos del carrito de la sesión utilizando el contents()método de la clase de carrito.
    • Pase el contenido del carrito para ver y cargar la vista de pago.
  • placeOrder () -
    • Insertar información del pedido en la base de datos.
    • Recupere los contenidos del carrito e inserte los artículos del pedido en la base de datos.
    • Elimine todos los artículos del carrito y destruya el contenido del carrito utilizando el destroy()método de clase de carrito.
  • orderSuccess () -
    • Obtener los datos del pedido de la base de datos.
    • Pase los datos de la orden para ver y cargar la vista de éxito de la orden.
<? php 
defined ( 'BASEPATH' ) O exit ( 'No se permite el acceso directo al script' ); 

clase  Checkout  extiende  CI_Controller { 
    
    function   __construct () { 
        parent :: __construct (); 
        
        // Cargar formulario library & helper 
        $ this -> load -> library ( 'form_validation' ); 
        $ this -> load -> helper ( 'form' ); 
        
        // Cargar biblioteca de carro 
        $ esto -> cargar -> biblioteca ('carrito' ); 
        
        // Cargar modelo de producto 
        $ this -> load -> model ( 'producto' ); 
        
        $ this -> controller  'checkout' ; 
    } 
    
índice de     función  () { 
        // Redireccionar si el carrito está vacío 
        si ( $ this -> cart -> total_items () <=  0 ) { 
            redirect ( 'products /' ); 
        } 
        
        $ custData  $ data  = array (); 
        
        // Si la solicitud de pedido es enviada 
        $ submit  $ this -> input -> post ( 'placeOrder' ); 
        if (isset ( $ submit )) { 
            // Reglas de validación de campos de formulario 
            $ this -> form_validation -> set_rules ( 'name' 'Name' 'required' ); 
            $ this -> form_validation -> set_rules ( 'email' 'Email' 'required | valid_email' ); 
            $ this -> form_validation -> set_rules ( 'phone''Teléfono' 'requerido' ); 
            $ this -> form_validation -> set_rules ( 'address' 'Address' 'required' ); 
            
            // Prepare los datos del cliente 
            $ custData  = array ( 
                'name'      =>  strip_tags ( $ this -> input -> post ( 'name' )), 
                'email'      =>  strip_tags ( $ this -> input -> post ( 'email ' )) 
                '     strip_tags ( $ this -> input -> post ( 'phone' )), 
                'address' =>  strip_tags ( $ this -> input -> post ( 'address' )) 
            ); 
            
            // Valide los datos del formulario enviado 
            si ( $ this -> form_validation -> run () ==  true ) { 
                // Inserte los datos del cliente 
                $ insert  $ this -> product -> insertCustomer ( $ custData );
                
                // Verifique el estado de inserción de datos del cliente 
                si ( $ insertar ) { 
                    // Insertar orden 
                    $ orden  $ esto -> placeOrder ( $ insertar ); 
                    
                    // Si el envío de la orden es exitoso 
                    si ( $ orden ) { 
                        $ esto -> sesión -> set_userdata ( 'success_msg' 'Orden colocada exitosamente.' ); 
                        redirigir ( $ this -> controller . '/ orderSuccess /' . $ order ); 
                    } else { 
                        $ data [ 'error_msg'] =  'Error al enviar el pedido, inténtalo de nuevo.' ; 
                    } 
                } else else { 
                    $ data [ 'error_msg' ] =  ' Ocurrieron algunos problemas, por favor intente nuevamente.' ; 
                } 
            } 
        } 
        
        // Datos del cliente 
        $ data [ 'custData' ] =  $ custData ; 
        
        // Recuperar datos del carrito de la sesión 
        $ data [ 'cartItems' ] =  $ this -> cart -> contents (); 
        
        // Pasar los datos de los productos a la vista 
        $ esto -> cargar ->vista ( $ this -> controller . '/ index' $ data ); 
    } 
    
    function  placeOrder ( $ custID ) { 
        // Insertar datos del pedido 
        $ ordData  = array ( 
            'customer_id'  =>  $ custID , 
            'grand_total'  =>  $ this -> cart -> total () 
        ); 
        $ insertOrder  $ this -> product -> insertOrder ( $ ordData ); 
        
        if ( $ insertOrder ) {
            // Recuperar datos de carrito de la sesión 
            $ cartItems  $ this -> cart -> contents (); 
            
            // Elementos del carrito 
            $ ordItemData  = array (); 
            $ i = 0 ; 
            foreach ( $ cartItems  como  $ item ) { 
                $ ordItemData [ $ i ] [ 'order_id' ] =  $ insertOrder ; 
                $ ordItemData [ $ i ] [ 'product_id' ] =  $ item [ 'id' ]; 
                $ ordItemData [ $ i ] [ 'cantidad'] =  $ item [ 'qty' ]; 
                $ ordItemData [ $ i ] [ 'sub_total' ] =  $ item [ "subtotal" ]; 
                $ i ++; 
            } 
            
            if (! empty ( $ ordItemData )) { 
                // Insertar artículos de pedido 
                $ insertOrderItems  $ this -> product -> insertOrderItems ( $ ordItemData ); 
                
                if ( $ insertOrderItems ) { 
                    // Eliminar artículos del carrito 
                    $ this -> cart -> destroy ();
                    
                    // Devuelve la identificación de la orden 
                    de retorno  $ insertOrder ; 
                } 
            } 
        } 
        devolver  falso ; 
    } 
    
    function  orderSuccess ( $ ordID ) { 
        // Obtener datos de pedido de la base 
        de datos $ data [ 'order' ] =  $ this -> product -> getOrder ( $ ordID ); 
        
        // Cargar detalles del pedido ver 
        $ this -> cargar -> ver ( $ this -> controlador . '/ Order-success' $ datos ); 
    } 
    
}

Modelo (Product.php)

El modelo del producto maneja el trabajo relacionado con la base de datos.
  • __construct () : especifique el nombre de la tabla de la base de datos.
  • getRows () : recupera los datos de los productos de la base de datos. Devuelve registro único si se especificó la ID, de lo contrario todos los registros.
  • getOrder () : recupera los datos del pedido de la orderstabla según la ID.
  • insertCustomer () : inserte los datos del cliente en la customerstabla.
  • insertOrder () : inserta la información del pedido en la orderstabla.
  • insertOrderItems () : inserta datos de artículos de pedido en la order_itemstabla.
<? php if (!  defined ( 'BASEPATH' )) exit ( 'No se permite el acceso directo al script' ); 

clase  de productos  se extiende  CI_Model { 
    
    función  __construct () { 
        $ this -> protable  'productos' ; 
        $ this -> custTable  'clientes' ; 
        $ this -> ordTable  'orders' ; 
        $ this -> ordItemsTable  'order_items' ; 
    } 
    
    / *
     * Obtener datos de productos de la base de datos 
     * @param id devuelve un solo registro si se especifica, de lo contrario, todos los registros 
     * / 
    función pública  getRows ( $ id  '' ) { 
        $ this -> db -> select ( '*' ); 
        $ this -> db -> from ( $ this -> proTable ); 
        $ this -> db -> where ( 'status' '1' ); 
        if ( $ id ) { 
            $ this -> db-> donde ( 'id' $ id ); 
            $ consulta  $ esto -> db -> get (); 
            $ result  $ query -> row_array (); 
        } else { 
            $ this -> db -> order_by ( 'name' 'asc' ); 
            $ consulta  $ esto -> db -> get (); 
            $ result  $ query -> result_array (); 
        } 
        
        // Devolver datos recuperados
        volver! vacío ( $ resultado )? $ resultado : falso ; 
    } 
    
    / * 
     * Obtener datos de orden de la base de datos 
     * @param id devuelve un registro único de la ID especificada 
     * / 
    función pública  getOrder ( $ id ) { 
        $ this -> db -> select ( 'o. *, C.name, c.email, c.phone, c.address ' ); 
        $ this -> db -> from ( $ this -> ordTable . 'as o' ); 
        $ esto -> db -> unirse ($ esto -> custTable . 'como c' 'c.id = o.customer_id' 'left' ); 
        $ this -> db -> where ( 'o.id' $ id ); 
        $ consulta  $ esto -> db -> get (); 
        $ result  $ query -> row_array (); 
        
        // Obtener artículos de pedido 
        $ this -> db -> select ( 'i. *, P.image, p.name, p.price' ); 
        $ esto -> db ->( $ this -> ordItemsTable . 'as i' ); 
        $ this -> db -> join ( $ this -> proTable . 'as p' 'p.id = i.product_id' 'left' ); 
        $ this -> db -> where ( 'i.order_id' $ id ); 
        $ query2  $ this -> db -> get (); 
        $ result [ 'items' ] = ( $ query2 -> num_rows ()> )? $ query2 -> result_array (): array (); 
        
        // Devolver datos recuperados 
        devolver vacío ( $ resultado )? $ resultado : falso ; 
    } 
    
    / * 
     * Insertar datos del cliente en la base de datos 
     * @param data array 
     * / 
    public function  insertCustomer ( $ data ) { 
        // Agregar fecha creada y modificada si no está incluida 
        si (! Array_key_exists ( "created" $ data )) { 
            $ datos [ 'creado' ] =  fecha ( "Ymd H: i: s" );
        } 
        if (! array_key_exists ( "modificado" $ datos )) { 
            $ datos [ 'modificado' ] =  fecha ( "Ymd H: i: s" ); 
        } 
        
        // Insertar datos del cliente 
        $ insert  $ this -> db -> insert ( $ this -> custTable $ data ); 

        // ¿Devuelve el estado de 
        retorno  $ insertar ? $ this -> db -> insert_id (): false ; 
    } 
    
    / *
     * Insertar datos de orden en la base de datos 
     * @param data array 
     * / 
    public function  insertOrder ( $ data ) { 
        // Agregar fecha de creación y modificación, si no se incluye 
        si (! Array_key_exists ( "created" $ data )) { 
            $ data [ ' created ' ] =  date ( "Ymd H: i: s" ); 
        } 
        if (! array_key_exists ( "modificado" $ datos )) { 
            $ datos [ 'modificado' ] =  fecha ( "Ymd H: i: s" );
        } 
        
        // Insertar datos del pedido 
        $ insert  $ this -> db -> insert ( $ this -> ordTable $ data ); 

        // ¿Devuelve el estado de 
        retorno  $ insertar ? $ this -> db -> insert_id (): false ; 
    } 
    
    / * 
     * Insertar datos de artículos de pedido en la base de datos 
     * @param data array 
     * / 
    public function  insertOrderItems ( $ data  = array ()) { 
        
        // Insertar artículos de pedido 
        $ insert  $ this -> db -> insert_batch ( $ this -> ordItemsTable $ data ); 

        // ¿Devuelve el estado de 
        retorno  $ insertar ? verdadero : falso ; 
    } 
    
}

Puntos de vista

productos /: Los productos se enumeran con el botón Agregar al carrito . Además, el número total de artículos del carrito se muestra utilizando el método de la biblioteca del carrito.
index.php
total_items()
< h2 > Productos </ h2 >
 
<! - Cesta -> 
< un  href = " <? Php?  Eco  base_url ( 'carrito' );  ?> "  Clase = "cesta-link"  título = "Ver carro" > 
    < i  clase = "glyphicon glyphicon- shopping-cart " > </ i > 
    < span > ( <? php  echo  $ this -> cart -> total_items ();  ?> ) </ span >
</ a >

<! - Listar todos los productos -> 
< div  class = "row" > 
    < div  class = "col-lg-12" > 
    <? Php  if (! Empty ( $ products )) {foreach ( $ products  as  $ row ) {  ?> 
        < div  class = "col-sm-4 col-lg-4 col-md-4" > 
            < div  class = "thumbnail" > 
                < img  src = " <? php  echo  base_url ( ' uploads / product_images / ' .$ fila ['imagen' ]); ?> " />
                < div  class = " caption " >
                    < h4  class = " pull-right " >$<? php echo $ row['price']; ?>USD</ h4 >
                    < h4 ><? php echo $ row['name']; ?></ h4 >
                    < p ><? php echo $ row[' descripción ' ]; ?></ P > 
                </ div > 
                < div  clase = "atc" > 
                    < un  href = " <? Php?  Eco  base_url ( 'productos / addToCart /' . $ Fila [ 'id' ]);  ?> "  Clase = "Bot btn-éxito " >
                        añadir a la cesta
                    </ a > 
                </ div > 
            </ div > 
        </ div > 
    <? php  }} else else  ?? 
        < p > Producto (s) no encontrado ... </ p > 
    <? php  ?> 
    </ div > 
</ div >
carrito /: Esta vista muestra el carrito de compras con productos y detalles de precios.
index.php
  • Los artículos del carrito se enumeran con la información del producto (imagen, nombre, precio, etc.), la cantidad, el subtotal y el total general.
  • Se proporcionan dos botones:
    • Continuar comprando: permite agregar más artículos al carrito.
    • Checkout: permite realizar el checkout desde el carrito y previsualizar el pedido.
  • El usuario puede actualizar la cantidad y eliminar el artículo del carrito.
  • La updateCartItem()función inicia una solicitud Ajax para actualizar la cantidad del artículo usando jQuery. El rowid y la cantidad se envían a través de Ajax al updateItemQty()método del controlador de carro.
<! - Incluya la biblioteca jQuery -> 
< script  src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" ></ script >

< script >
/ * Actualizar cantidad de artículo * / 
function  updateCartItem ( obj, rowid ) {
 $ .get ( "<? php echo base_url ('cart / updateItemQty /');?>" , {rowid: rowid, qty: obj.value}, function ( resp ) {
   if (resp == 'ok' ) {
   location.reload ();
  } else {
   alerta ( 'Falló la actualización del carrito, inténtalo de nuevo' );
  }
 });
}
</ script >

< h2 > Carro de la compra </ h2 > 
< div  class = "row cart" > 
    < table  class = "table" > 
    < thead > 
        < tr > 
            < th  width = "10%" > </ th > 
            < th  width = " 30% " > Producto </ th > 
            < th  width = " 15% " >Precio </ th >
            < th  width = "13%" > Cantidad </ th > 
            < th  width = "20%" > Subtotal </ th > 
            < th  width = "12%" > </ th > 
        </ tr > 
    </ thead > 
    < tbody > 
        <? php  if ( $ this -> cart -> total_items ()> 0 ) {foreach ( $ cartItems  como  $ item ) {    ?> 
        < tr > 
            < td > 
                <? php $ imageURL  =! empty ( $ item [ "image" ])? base_url ( ' uploads / product_images /' . $ item [ "image" ]): base_url ( ' asset / images / pro-demo-img.jpeg' ); ?> 
                < img  src = " <? php  echo  $ imageURL ?> "  width = "50" /> 
            </ td > 
            < td >$ item [ "nombre" ]; ?> </ td > 
            < td > <? php  echo  '$' . $ item [ "precio" ]. 'USD' ?> </ td > 
            < td > < input  type = "number"  class = "form-control text-center"  value = " <? php  echo  $ item [ " qty " ];  ?> " onchange = "[ "rowid" ]; ?> ') "> </ td > 
            < td > <? php  echo  ' $ ' . $ item [ " subtotal " ]. ' USD ' ?> </ td > 
            < td > 
                < a  href = " <? php  echo  base_url ( 'cart / removeItem /' . $ item [ "rowid" ]); ?> "class =" btn btn-danger "onclick =" return confirm (' "glyphicon glyphicon-trash" > </ i > </ a > 
            </ td > 
        </ tr > 
        <? php  }} else else  ?? 
        < tr > < td  colspan = "6" > < p > Su carrito está vacío ..... </ p > </ td > 
        <? php  ?> 
    </ tbody > 
    < tfoot > 
        < tr > 
            <td > < a  href= " <? php  echo  base_url ( 'products /' );  ?> "  class = "btn btn-warning" > < i  class = "glyphicon glyphicon-menu-left" > </ i > Continuar comprando </ a > < / td > 
            < td  colspan = "3" > </ td > 
            <? php  if ( $ this -> cart -> total_items ()> 0 ) {  ?>
            < td  class = "text-left" > Total general: < b > <? php  echo  '$' . $ esto -> carrito -> total (). 'USD' ?> </ B > </ td > 
            < td > < un  href = " <php?  Eco  base_url ( 'checkout /' );  ?> "  Clase = "btn btn-éxito btn-bloque" >i  class = "glyphicon glyphicon-menu-right" > </ i > </ a > </ td > 
            <? php  ?> 
        </ tr > 
    </ tfoot > 
    </ table > 
</ div >
checkout /: Esta vista muestra la vista previa del pedido antes del envío.
index.php
  • La vista previa se muestra antes de realizar el pedido.
  • Se muestra un formulario HTML con algunos campos de entrada en la vista previa del pedido para proporcionar la información de envío (nombre, correo electrónico, teléfono y dirección).
  • La validación y la función de procesamiento de datos precargados se agregan al formulario.
  • El Lugar Solicitar botón permite la presentación de la orden.
< h2 > Vista previa de pedido </ h2 > 
< div  class = "checkout de fila" > 
    <! - Artículos de pedido -> 
    < table  class = "table" > 
    < thead > 
        < tr > 
            < th  width = "13%" > </ th > 
            < th  width = "34%" > Producto </ th > 
            < th  width = "18% " > Precio </th > 
            < th  width = "13%" > Cantidad </ th > 
            < th  width = "22%" > Subtotal </ th > 
        </ tr > 
    </ thead > 
    < tbody > 
        <? php  if ( $ this -> carro -> total_items ()>  0 ) {foreach ( $ cartItems  as  $ item ) {  ?> 
        < tr > 
            <td >
                <? php $ imageURL  =! empty ( $ item [ "image" ])? base_url ( ' uploads / product_images /' . $ item [ "image" ]): base_url ( ' asset / images / pro-demo-img.jpeg' ); ?> 
                < img  src = " <? php  echo  $ imageURL ?> "  width = "75" /> 
            </ td > 
            < td > <? php  echo  $ item [ "name" ]; td > 
            < td > <? php  echo  '$' . $ item [ "precio" ]. 'USD' ?> </ td > 
            < td > <? php  echo  $ item [ "qty" ]; ?> </ td > 
            < td > <? php  echo  '$' . $ item [ "subtotal" ]. 'USD' ?> </ td > 
        <
        }} else else  ? " 
        < tr > 
            < td  colspan = " 5 " > < p > No hay artículos en su carrito ... </ p > </ td > 
        </ tr > 
        <? php  ?> 
    </ tbody > 
    < tfoot > 
        < tr > 
            < td  colspan = "4" > </ td > 
            <? php  if ( $ this -> cart ->total_items ()> 0 ) {  ?> 
            < Td  class = "text-center" > 
                < strong > Total <? Php  echo  '$' . $ esto -> carrito -> total (). 'USD' ?> </ strong > 
            </ td > 
            <? php  ?> 
        </ tr > 
    </ tfoot > 
    </ table >
    
    <! - Dirección de envío -> 
    < form  class = "form-horizontal"  method = "post" > 
    < div  class = "ship-info" > 
        < h4 > Shipping Info </ h4 > 
        < div  class = "form- grupo " > 
            < label  class = " control-label col-sm-2 " > Nombre: </ label > 
            < div  class = " col-sm-10 " >
                < tipo de entrada  ="text"  class = "form-control"  name = "name"  value = " <? php  echo! empty ( $ custData [ 'name' ])? $ custData [ 'name' ]: '' ?> "  placeholder = "Ingresar nombre" > 
                <? Php  echo  form_error ( 'nombre' , '<p clase = "error de bloqueo de ayuda">' , '</p>' ); ?> 
            </ div > 
        <
         = "form-group" > 
            < label  class = "control-label col-sm-2" > Correo electrónico: </ label > 
            < div  class = "col-sm-10" > 
                < input  type = "email"  class = " control de formulario "  nombre = " correo electrónico  valor = " <? php  echo! empty ( $ custData [ 'email' ])? $ custData [ 'email' ]: '' ?> "  placeholder ="Enter email" > 
                <? Php  echo  form_error ( 'email' , '<p class = "help-block error">' , '</p>' ); ?> 
            </ div > 
        </ div > 
        < div  class = "form-group" > 
            < label  class = "control-label col-sm-2" > Teléfono: </ label > 
            < div  class = "col-sm- 10 " > 
                <  "form-control"  name = "phone"  value = " <? php  echo! empty ( $ custData [ 'phone' ])? $ custData [ 'phone' ]: '' ?> "  placeholder = "Enter contact no" > 
                <? php  echo  form_error ( 'phone' , '<p class = "help-block error">' , '</p>' ); ?> 
            </ div > 
        </ div > 
        < 
            < label  class = "control-label col-sm-2" > Dirección: </ label > 
            < div  class = "col-sm-10" > 
                < input  type = "text"  class = "form-control"  name = " address "  value = " <? php  echo! empty ( $ custData [ 'address' ])? $ custData [ 'address' ]: '' ?> " placeholder = "Ingresar dirección" >
                <? php  echo  form_error ( 'address' , '<p class = "help-block error">' , '</p>' ); ?> 
            </ Div > 
        </ div > 
    </ div > 
    < div  clase = "footBtn" > 
        < un  href = " <? Php?  Eco  base_url ( 'compra /' );  ?> "  Clase = "btn btn de alerta" > < </ i > Volver al Carrito </ a > 
        < button  type = "submit"  name = "placeOrder"  class = "btn btn-success orderBtn" > Hacer pedido < i  class = "glyphicon glyphicon-menu-right" > </ i > </ button > 
    </ div > 
    </ form > 
</ div >
order-success.php
Si el envío de la orden es exitoso, el estado se muestra con los detalles de la orden.
< h2 > Estado del pedido </ h2 > 
< p  class = "ord-succ" > Su pedido se ha realizado correctamente. </ p >

<! - Estado del pedido e información de envío -> 
< div  class = "fila col-lg-12 ord-addr-info" > 
    < div  class = "col-sm-6 adr" > 
        < div  class = "hdr" > Dirección de envío </ div > 
        < p > <? Php  echo  $ order [ 'name' ]; ?> </ p > 
        < p > <? php  echo  $ order [ 'email' ]; ?>
        < p > <? php  echo  $ order [ 'phone' ]; ?> </ p > 
        < p > <? php  echo  $ order [ 'address' ]; ?> </ p > 
    </ div > 
    < div  class = "col-sm-6 info" > 
        < div  class = "hdr" > Información de pedido </ div > 
        < p > < b >b > # <? php  echo  $ order [ 'id' ]; ?> </ p > 
        < p > < b > Total </ b >  <? php  echo  '$' . $ orden [ 'grand_total' ]. 'USD' ?> </ p > 
    </ div > 
</ div >

<! - Order items -> 
< div  class = "row ord-items" > 
    <? Php  if (! Empty ( $ order [ 'items' ])) {foreach ( $ order [ 'items' ] as  $ item ) {  ?> 
    < div  class = "col-lg-12 item" > 
        < div  class = "col-sm-2" > 
            < div  class = "img"  style = "height: 75px; width: 75px;" > 
                <? php $ imageURL  =!])? base_url ( ' uploads / product_images /' . $ item [ "image" ]): base_url ( ' asset / images / pro-demo-img.jpeg' ); ?> 
                < img  src = " <? php  echo  $ imageURL ?> "  width = "75" /> 
            </ div > 
        </ div > 
        < div  class = "col-sm-4" > 
            < p > < b > [ "nombre" ]; ?> </ b > </ p > 
            < p > <? php  echo  '$' . $ item [ "precio" ]. 'USD' ?> </ p > 
            < p > QTY: <? php  echo  $ item [ "cantidad" ]; ?> </ p > 
        </ div > 
        < div  class = "col-sm-2" > 
            <> <? php  echo  '$' . $ item [ "sub_total" ]. 'USD' ?> </ b > </ p > 
        </ div > 
    </ div > 
    <? php  }}  ?> 
</ div >

Conclusión

Hemos intentado cubrir todo el proceso para implementar la funcionalidad del carrito de compras en la aplicación CodeIgniter. Puede mejorar fácilmente este script e integrar funcionalidades avanzadas según sus necesidades. Nuestro código de ejemplo le permite agregar al carrito de compras al instante en el marco de CodeIgniter. En este ejemplo, la biblioteca Bootstrap se utiliza para personalizar la vista de la lista de productos, el carrito de la compra, el pago y el pedido.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.