Zend Framework: Zend_View Basic Placeholders

Zend Framework: Zend_View Basic Placeholders

Bài viết trước có bàn đến placeholder kết hợp với một số Zend_View_Helper trong việc thay đổi nội dung phần tử <head> tùy theo từng controller hay action, bài viết này sẽ bàn đến việc tạo ra những thay đổi nội dung cho các phần tử khác trên layout, ví dụ như ứng dụng tạo cấu trúc phần sidebar.

Đầu tiên nếu bạn muốn cấu trúc HTML phần sidebar của bạn như sau:

<div class="sidebar">
    <div class="block">
        <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        </p>
    </div>
    <div class="block">
        <ul>
            <li><a href="/some/target">Link</a></li>
            <li><a href="/some/target">Link</a></li>
        </ul>
    </div>
</div>

Cấu trúc HTML trên ta thấy phần tử có class="sidebar" sẽ bao tất cả, các phần tử khác bên trong sẽ được đặt trong phần tử có class="block".

Nội dung sidebar sẽ được thay đổi dựa trên từng controller và action, nhưng cấu trúc của chúng sẽ đươc thống nhất, ta sẽ thực hiện điều này bằng cách thực hiện xây dựng nó trong tập tin bootstrap như sau:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
  protected function _initSidebar(){
     $this->bootstrap('View');
     $view = $this->getResource('View');

     $view->placeholder('sidebar')
       ->setPrefix("<div class=\"sidebar\">\n    <div class=\"block\">\n")
       ->setSeparator("</div>\n    <div class=\"block\">\n")
       ->setPostfix("</div>\n</div>");
  }
}

Bây giờ để đưa cấu trúc placeholder vào một controller nào đó để áp dụng cho tất cả các action bạn sẽ khai báo phương thức preDispatch() trong controller, ở đây bạn có thể trực tiếp đưa nội dung của placeholder vào phương thức preDispath() hoặc render một tập tin view script vào nó như ví dụ sau:

Chúng ta sẽ tạo ra một tập tin trong view script index/_sidebar.phtml

<?php $this->placeholder('sidebar')->captureStart() ?>
<h4>sidebar</h4>
<ul>
    <li><a href="#">List</a></li>
    <li><a href="#">Create</a></a></li>
</ul>
<?php $this->placeholder('sidebar')->captureEnd() ?>

Khai báo phương thức preDispath() trong controller và render tập tin _sidebar.phtml

class IndexController extends Zend_Controller_Action{
  public function preDispatch(){
      $this->view->render('index/_sidebar.phtml');
  }
}

Để thêm thông tin vào sidebar ở một action nào đó trong cotroller trên thì trong view script của action đó ta gọi tới palceholder('sidebar') và sử dụng phương thức append hay prepend để thêm nội dung. Ví dụ:

$this->placeholder('sidebar')
     ->append('<p>Lorem ipsum dolor sit amet</p>');

Bây giờ bạn có thể xuất placeholder vào tập tin layout của bạn nơi nào bạn muốn. Ví dụ:

<html>
<head>
    <title>My Site</title>
</head>
<body>
    <div class="content">
        <?php echo $this->layout()->content ?>
    </div>
    <?php echo $this->placeholder('sidebar') ?>
</body>
</html>

Tham khảo framework.zend.com

Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Giới thiệu tính năng Drupal Commerce MailChimp

Giới thiệu tính năng Drupal Commerce MailChimp

This article describes the main features of the Commerce MailChimp module. The module integrates Drupal Commerce, MailChimp module and MailChimp’s eCommerce360 feature.

Facebook

Facebook dự định đưa quảng cáo vào trang News Feed của người dùng

Mạng xã hội nổi tiếng này đang thử nghiệm một cách thức quảng cáo mới, đó là đăng trực tiếp quảng cáo của mình lên News Feed của người dùng.

Hướng dẫn tải các driver laptop của tất cả hãng sản xuất

Hướng dẫn tải các driver laptop của tất cả hãng sản xuất

Sở dĩ trước đây, khi mua laptop chúng ta thường được tặng kèm đĩa driver là vì lúc ấy internet chưa mạnh mẽ và gần gũi như hiện nay.

Công ty diệt chuột T&C

 

Diet con trung