------
Phần x5. CakePHP2
– Tạo home page
Xem (clip số 10 – chickenrainshop):
Cấu hình Routes (phút 1:00).
Routing là ánh xạ các URL sang các controller và action
tương ứng, nhằm làm cho URL trên thanh địa chỉ đẹp hơn, dễ sử dụng và linh hoạt
hơn.
Đọc thêm tại đây: https://book.cakephp.org/2.0/en/development/routing.html
Tập tin routes.php nằm trong thư mục chickenrainshop\Config.
Cú pháp,
Router::connect('/', ['controller' => 'books', 'action' =>
'index']);
Nghĩa là: nếu người dùng chỉ nhập tên website vào đường dẫn
(/), ví dụ http://local.chickenrainshop.
thì sẽ chuyển hướng tới trang index của controller Books.
Ví dụ, thực hiện hiển thị 10 quyển sách mới nhất lên trang
chủ.
[BooksController, index( )]
$books = $this->Book->find('all', [
'fields'
=> ['title', 'image', 'sale_price', 'slug'],
'order'
=> ['created' => 'desc'],
'limit'
=> 10,
'contain'
=> ['Writer' => ['fields' => 'name']]
]);
Gửi dữ liệu từ controller lên view, sử dụng hàm set(), (phút
5:08).
$this->set('books', $books);
Trong đó, ‘books’ là tên biến ở bên view, $books là giá trị
sẽ được gán vào ‘books’.
Bên view index, dùng hàm pr($books) để kiểm tra xem dữ liệu
đã được gửi từ controller lên view chưa, đồng thời xem cách tổ chức dữ liệu để truy
xuất và hiển thị cho hợp lý. (phút 7:30).
Học thêm cách viết vòng lặp foreach, rất gọn và tiện.
<?php foreach($books as $book): ?>
//mã xử lý trong vòng lặp
<?php endforeach; ?>
[view Books\index]
<div class="books index">
<h2><?php
echo __('Books'); ?></h2>
<?php
foreach($books as $book): ?>
<?php
echo $book['Book']['title']; ?> <br>
<?php
echo $book['Book']['image']; ?> <br>
Giá
bán:<?php echo $book['Book']['sale_price']; ?> <br>
<?php
foreach($book['Writer'] as $writer): ?>
<?php
echo $writer['name'].' '; ?>
<?php
endforeach; ?>
<br>
<hr>
<?php
endforeach; ?>
</div>
Ở trên thấy có dòng mã sau:
<h2><?php echo __('Books'); ?></h2>
Vậy __( ) là gì?
Đọc thêm tại đây:
__() là một hàm toàn cục (global function) của CakePHP, nó
cho phép chèn thêm tham số vào một chuỗi khi xuất. Giống với hàm sprintf() của
PHP.
Ví dụ,
<?php $string = 'Nguyễn Văn Tèo'; ?>
<h2><?php echo __('anh %s', $string); ?></h2>
Kết quả xuất ra là:
anh Nguyễn Văn Tèo.
Xem (clip số 11 – chickenrainshop):
Viết hàm truy vấn dữ liệu trong model, rồi trong controller
sẽ gọi hàm truy vấn này. Việc này giúp tối ưu khi viết mã, không phải viết lại
câu truy vấn nhiều lần (phút 1:40).
Trong model Book định nghĩa hàm latest().
[model Book]
public function latest() {
return
$this->find('all', [
'fields'
=> ['id','title', 'image', 'sale_price', 'slug'],
'conditions'
=> ['published' => 1],
'order'
=> ['created' => 'desc'],
'limit'
=> 10,
'contain'
=> ['Writer' => ['fields' => ['name', 'slug']]]
]);
}
Trong controller Books sẽ gọi hàm latest() để lấy 10 cuốn
sách.
[controller Books]
public function index() {
$books
= $this->Book->latest();
$this->set('books',
$books);
}
Hiển thị hình ảnh bằng html helper (phút 4:25).
<?php echo $this->Html->image($book['Book']['image']);
?>
Trong đó,
$book['Book']['image'] sẽ chứa đường dẫn của tập tin hình
ảnh, ví dụ: /webroot/files/ki-nang-song/ba-diem-tinh-yeu-tren-duong-tu-tap.jpg
Chỉnh kích thước của hình ảnh bằng html helper:
<?php echo $this->Html->image($book['Book']['image'],
['width' => '60px', 'height' => '80px']); ?>
Định dạng xuất tiền bằng html helper:
Giá bán:<?php echo
$this->Number->currency($book['Book']['sale_price'],' VND',['places'
=> 0,'wholePosition' => 'after']); ?>
Kết quả là: Giá bán:46,000 VND