-----
Phần x37. CakePHP2
– findAllById, TimeFormat, json_decode
Xem (clip số 39a – chickenrainshop):
- Hiển thị lịch sử mua hàng của người dùng (39a)
- findAllByUserId (2":59)
- Định dạng thời gian dùng Time->format (6":38)
- Dùng json_decode (7":14)
Tạo link để đi tới trang xem lịch sử mua hàng của người
dùng:
[Elements\user_panel.ctp]
<li><?php echo $this->Html->link('Đổi mật khẩu', '/doi-mat-khau');
?></li>
<li><?php echo
$this->Html->link('Lịch sử mua hàng', '/lich-su-mua-hang');
?></li>
<li><?php echo $this->Html->link('Đăng xuất',
'/logout'); ?></li>
Thực hiện route link ‘/lich-su-mua-hang’ về action history
của OrdersController:
[routes.php]
Router::connect('/cap-nhat-thong-tin', ['controller' =>
'users', 'action' => 'changeInfo']);
Router::connect('/lich-su-mua-hang',
['controller' => 'orders', 'action' => 'history']);
Router::connect('/dang-ky', ['controller' => 'users', 'action'
=> 'register']);
Viết action history:
Ý tưởng là: duyệt bảng Order, lấy ra các đơn hàng của người
dùng.
[OrdersController.php]
/**
* xem lịch sử mua hàng
*
*/
public function history() {
$this->set('title_for_layout',
'Lịch sử mua hàng');
$userInfo =
$this->getUser();
// lấy các đơn
hàng của user
// - lấy theo id
// - lấy hết các
trường 'null'
// - sắp xếp
theo ngày mua mới nhất
$orders =
$this->Order->findAllByUserId($userInfo['id'], null, ['Order.created'
=> 'desc']);
$this->set('orders',
$orders);
}
Tạo view history:
[View\Orders\history.ctp]
<div class="panel panel-info">
<h4
class="panel-heading"><span class="glyphicon
glyphicon-th"></span> Lịch sử mua hàng</h4>
<h4>Dưới
đây là toàn bộ thông tin mua hàng của bạn</h4>
<?php echo $this->Flash->render('order');
?>
<hr>
<table
class="table table-striped">
<thead>
<tr>
<th>STT</th>
<th>Thời
gian</th>
<th>Email</th>
<th>Tiền
thanh toán</th>
<th>Tình
trạng</th>
<th>Chi
tiết</th>
</tr>
</thead>
<tbody>
<?php
$i = 1; ?>
<?php
foreach ($orders as $order): ?>
<tr>
<td><?php
echo $i++; ?></td>
<td><?php
echo $this->Time->format('d-m-Y H:i:s', $order['Order']['created'], null,
'Asia/Ho_Chi_Minh'); ?></td>
<td><?php
echo json_decode($order['Order']['customer_info'])->email; ?></td>
<td><?php
echo
$this->Number->currency(json_decode($order['Order']['payment_info'])->total,
'VND', ['places'=>0, 'wholePosition'=>'after']); ?></td>
<td><?php
if ($order['Order']['status'] == 0): ?>
<span
class="label label-info">Đang xử lý</span>
<?php
elseif ($order['Order']['status'] == 1): ?>
<span
class="label label-success">Đã xử lý</span>
<?php
else: ?>
<span
class="label">Hủy</span>
<?php
endif ?>
</td>
<td><a
href="#">Xem</a></td>
</tr>
<?php
endforeach ?>
</tbody>
</table>
<hr>
<strong>Ghi
chú tình trạng đơn hàng</strong>
<ul>
<li>Đã
xử lý: đơn hàng đã được chấp nhận</li>
<li>Đang
xử lý: đơn hàng đang đợi xử lý, bạn vui longf thanh toán cho đơn hàng
này</li>
<li>Hủy:
đơn hàng đã bị hủy, vui lòng liên hệ tại <a
href="">đây</a> để biết thêm chi tiết</li>
</ul>
</div>
Sửa lại một chút mã trong OrdersController.php, action
checkout():
$this->Session->delete('payment');
$this->Flash->success('Đang
đợi xử lý, vui lòng chuyển khoản để thanh toán đơn hàng của bạn!', ['key' =>
'order', 'params' => ['class' => 'alert alert-success']]);
} else {
$this->Flash->error('Thanh toán không thực hiện được!',
['key' => 'order', 'params' => ['class' => 'alert alert-danger']]);
}
//$this->redirect($this->referer());
$this->redirect('/lich-su-mua-hang');
}
-----------
Cập nhật 12/7/2017
-----------