Ngu ngơ học làm web (x37) - CakePHP2 - findAllById, TimeFormat, json_decode

Tiếp theo của: Ngu ngơ học làm web (x36) - CakePHP2 – beforeValidate, unset, cập nhật thông tin user
-----

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
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web