-----
Phần x27. CakePHP2
– Cập nhật giỏ hàng (tt)
Xem (clip số 28 – chickenrainshop):
- escapse => false: để hiển thị nội dung html(7":07)
Viết đoạn mã cho nút “Làm rỗng giỏ hàng”, sử dụng một
postLink ,
trong [View\Books\view_cart.ctp]:
<?php echo $this->Form->postLink('Làm rỗng giỏ hàng',
'/books/emptyCart', ['class' => 'col-lg-3 btn btn-default empty']); ?>
Viết action emptyCart trong BooksController.php
public function emptyCart() {
if
($this->request->is('post')) {
$this->Session->delete('cart');
$this->Session->delete('payment');
$this->redirect($this->referer());
}
}
Viết chức năng xóa từng quyển sách.
Viết đoạn mã cho nút X, sử dụng một postLink,
trong [View\Books\view_cart.ctp]:
<?php echo
$this->Form->postLink('<span class="glyphicon
glyphicon-remove"></span>', '/books/remove/'.$book['id'],
['escape' => false]); ?>
Viết action remove trong BooksController.php
public function
remove($id = null) {
if
($this->request->is('post')) {
$this->Session->delete('cart.'.$id);
$cart
= $this->Session->read('cart');
if
(empty($cart)) {
$this->emptyCart();
}
else {
$total
= $this->Tool->arraySum($cart, 'quantity', 'sale_price');
$this->Session->write('payment.total',
$total);
}
$this->redirect($this->referer());
}
}
Xem (clip số 29bt – chickenrainshop):
Viết chức năng cập nhật số lượng sách.
Nội dung của form cập nhật số lượng, trong
[View\Books\view_cart.ctp]:
<?php echo $this->Form->create('Book', ['url' =>
['action' => 'quantityUpdate']], ['class' => 'form-inline']) ?>
<?php echo
$this->Form->input('bookId', ['type' => 'hidden', 'value' =>
$book['id']]); ?>
<?php echo
$this->Form->input('quantity', ['value' => $book['quantity'], 'class'
=> 'col col-lg-2', 'label' => false, 'div' => false]); ?>
<?php echo
$this->Form->button('Cập nhật', ['class' => 'btn btn-link', 'type'
=> 'submit']); ?>
<?php echo
$this->Form->end(); ?>
Viết action quantityUpdate() trong controller
BooksController.php:
Ý tưởng là:
- Khi gửi form lên thì gửi thêm trường bookId để biết được người
dùng đã tăng số lượng của cuốn
sách nào
- Dựa vào bookId, đọc cuốn sách tương ứng trong Session
- So sánh trường quantity do người dùng gửi lên ($newQuantity)
và trường quantity đọc từ Session ($oldQuantity)
- Nếu giá trị người dùng gửi lên lớn hơn 0 và khác giá trị
trước đó thì cập nhật lại trường quantity vào Session, đồng thời tính lại giá
trị của trường Tổng tiền
- Tải lại trang hiện tại để cập nhật các giá trị mới
public function quantityUpdate() {
if
($this->request->is('post')) {
$id
= $this->request->data['Book']['bookId'];
$book
= $this->Session->read('cart.'.$id);
$oldQuantity
= $book['quantity'];
$newQuantity
= $this->request->data['Book']['quantity'];
if
($newQuantity > 0 && $newQuantity != $oldQuantity) {
$book['quantity']
= $newQuantity;
$this->Session->write('cart.'.$id,
$book);
$cart
= $this->Session->read('cart');
$total
= $this->Tool->arraySum($cart, 'quantity', 'sale_price');
$this->Session->write('payment.total',
$total);
}
}
$this->redirect($this->referer());
}
-----------
Cập nhật 1/6/2017
-----------