Ngu ngơ học làm web (x8) - CakePHP2 - Element

Tiếp theo của: Ngu ngơ học làm web (x7) - CakePHP2 – Bài tập Phân trang
-----

Phần x8. CakePHP2 – Element


Xem (clip số 14 – chickenrainshop):

Element là các đoạn mã của view được sử dụng lại ở nhiều nơi, element còn được gọi là mini-view. 

Đọc thêm về element tại đây: https://book.cakephp.org/2.0/en/views.html#elements

Ví dụ, đoạn mã phân trang ở hai view: index và latest_book có thể viết lại dưới dạng một element, sau đó tại mỗi view sẽ gọi element.

Thư mục View\Elements là nơi chứa các element.

Ví dụ tạo một element có tên là pagination.ctp trong View\Elements,

 [pagination.ctp]
            <p>
                        <?php echo $this->Paginator->counter("Trang {:page}/{:pages}, hiển thị {:current} ".$object." trong tổng số {:count} ". $object . "."); ?> <br>
                        <?php echo $this->Paginator->prev('Quay lại'); ?>
                        <?php echo $this->Paginator->numbers([
                                    'separator' => ' - ',
                                    'before' => '| ',
                                    'after' => ' |'
                                    ]); ?>
                        <?php echo $this->Paginator->next('Kế tiếp'); ?>
            </p>

Trong View\Writers\index.ctp sẽ gọi element pagination, để ý là khi gọi element pagination thì phải gửi biến $object từ index.ctp qua cho pagination.ctp, dòng này:

<?php echo $this->element('pagination', ['object' => 'tác giả']); ?>

[index.ctp]
<div class="writers index">
            <h2><?php echo __('Các tác giả'); ?></h2>
            <h4><?php echo $this->paginator->sort('name', 'Xếp theo thứ tự ngược lại'); ?></h4>
            <?php foreach($writers as $writer): ?>
            <?php echo $writer['Writer']['name'] ?> <br>
            <?php endforeach ?>
            <br>
            <hr>
            <br>
            <?php echo $this->element('pagination', ['object' => 'tác giả']); ?>
</div>

Còn đoạn mã dưới đây là gọi element pagination trong View\Books\latest_books.ctp

[latest_books.ctp]
<div class="books index">
            <h2><?php echo __('Sách mới'); ?></h2>
            <p>
                        <?php echo $this->paginator->sort('title','Sắp xếp theo tên sách'); ?>
            </p>
            <?php foreach($books as $book): ?>
                        <?php echo $book['Book']['title']; ?> <br>
                        <?php echo $this->Html->image($book['Book']['image'], ['width' => '60px', 'height' => '80px']); ?> <br>
                        Giá bán:<?php echo $this->Number->currency($book['Book']['sale_price'],' VND',['places' => 0,'wholePosition' => 'after']); ?> <br>
                        <?php foreach($book['Writer'] as $writer): ?>
                                    <?php echo $writer['name'].' '; ?>
                        <?php endforeach; ?>
                        <br>
                        <br>
                        <hr>
                        <br>
            <?php endforeach; ?>
            <?php echo $this->element('pagination', ['object' => 'quyển sách']); ?>

</div>
-----------
Cập nhật 26/4/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web