Step 1: tạo file Logic hiển thị thông tin Giỏ hàng
- Tạo file
frontend/checkout/cart.php
<?php
// Include file cấu hình ban đầu của `Twig`
require_once __DIR__ . '/../../bootstrap.php';
// Truy vấn database để lấy danh sách
// 1. Include file cấu hình kết nối đến database, khởi tạo kết nối $conn
include_once(__DIR__ . '/../../dbconnect.php');
// Kiểm tra dữ liệu trong session
$data = [];
if (isset($_SESSION['giohangdata'])) {
$data = $_SESSION['giohangdata'];
} else {
$data = [];
}
// Yêu cầu `Twig` vẽ giao diện được viết trong file `frontend/thanhtoan/giohang.html.twig`
// với dữ liệu truyền vào file giao diện được đặt tên là `giohangdata`
// dd($data);
echo $twig->render('frontend/thanhtoan/giohang.html.twig', ['giohangdata' => $data]);
Step 2: tạo file template giao diện Giỏ hàng
- Tạo file
templates/frontend/checkout/giohang.html.twig
{# Kế thừa layout frontend #}
{% extends "frontend/layouts/layout.html.twig" %}
{# Nội dung trong block title #}
{% block title %}
Giỏ hàng
{% endblock %}
{# End Nội dung trong block title #}
{# Nội dung trong block headline #}
{% block headline %}
Giỏ hàng
{% endblock %}
{# End Nội dung trong block headline #}
{% block customstyles %}
<style>
.hinhdaidien {
width: 150px;
height: 150px;
}
</style>
{% endblock %}
{# Nội dung trong block content #}
{% block content %}
<div class="container mt-4">
<div id="errors-container" class="alert alert-danger d-none face" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<h1 class="text-center">Giỏ hàng</h1>
<div class="row">
<div class="col col-md-12">
{% if giohangdata %}
<table class="table table-bordered">
<thead>
<tr>
<th>STT</th>
<th>Ảnh đại diện</th>
<th>Tên sản phẩm</th>
<th>Số lượng</th>
<th>Đơn giá</th>
<th>Thành tiền</th>
<th>Hành động</th>
</tr>
</thead>
<tbody id="datarow">
{% for sanpham in giohangdata %}
<tr>
<td>{{ loop.index }}</td>
<td>
{% if sanpham.hinhdaidien %}
<img src="/project-nentang/assets/uploads/{{ sanpham.hinhdaidien }}" class="hinhdaidien" />
{% else %}
<img src="/project-nentang/assets/shared/img/default-image_600.png" class="hinhdaidien" />
{% endif %}
</td>
<td>{{ sanpham.sp_ten }}</td>
<td>
<input type="number" id="soluong_{{ sanpham.sp_ma }}" name="soluong" value="{{ sanpham.soluong }}" />
<button class="btn btn-primary btn-sm btn-capnhat-soluong" data-sp-ma="{{ sanpham.sp_ma }}">Cập nhật</button>
</td>
<td>{{ sanpham.gia }}</td>
<td>{{ sanpham.soluong * sanpham.gia }}</td>
<td>
<!-- Nút xóa, bấm vào sẽ xóa thông tin dựa vào khóa chính `sp_ma` -->
<a id="delete_{{ loop.index }}" data-sp-ma="{{ sanpham.sp_ma }}" class="btn btn-danger btn-delete-sanpham">
<i class="fa fa-trash" aria-hidden="true"></i> Xóa
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h2>Giỏ hàng rỗng!!!</h2>
{% endif %}
<a href="/" class="btn btn-warning btn-md"><i class="fa fa-arrow-left" aria-hidden="true"></i> Quay
về trang chủ</a>
<a href="/frontend/thanhtoan/thanhtoan" class="btn btn-primary btn-md"><i class="fa fa-shopping-cart"
aria-hidden="true"></i> Thanh toán</a>
</div>
</div>
</div>
{% endblock %}
{# End Nội dung trong block content #}
{% block customscripts %}
<script>
$(document).ready(function () {
function removeSanPhamVaoGioHang(id) {
var dulieugoi = {
sp_ma: id
};
$.ajax({
url: '/project-nentang/frontend/ajax/giohang-xoasanpham-ajax.php',
method: "POST",
dataType: 'json',
data: dulieugoi,
success: function (data) {
// Refresh lại trang
location.reload();
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
var htmlString = `<h1>Không thể xử lý</h1>`;
$('#thongbao').html(htmlString);
// Hiện thông báo
$('.alert').removeClass('d-none').addClass('show');
}
});
};
$('.btn-delete-sanpham').on('click', function (event) {
event.preventDefault();
var id = $(this).data('sp-ma');
console.log(id);
removeSanPhamVaoGioHang(id);
});
function capnhatSanPhamTrongGioHang(id, soluong) {
var dulieugoi = {
sp_ma: id,
soluong: soluong
};
$.ajax({
url: '/project-nentang/frontend/ajax/giohang-capnhatsanpham-ajax.php',
method: "POST",
dataType: 'json',
data: dulieugoi,
success: function (data) {
// Refresh lại trang
location.reload();
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
var htmlString = `<h1>Không thể xử lý</h1>`;
$('#thongbao').html(htmlString);
// Hiện thông báo
$('.alert').removeClass('d-none').addClass('show');
}
});
};
$('.btn-capnhat-soluong').on('click', function(event) {
event.preventDefault();
var id = $(this).data('sp-ma');
var soluongmoi = $('#soluong_' + id).val();
capnhatSanPhamTrongGioHang(id, soluongmoi);
});
});
</script>
{% endblock %}
|