Zend Framework: Zend_View Basic Placeholders

  • PHP and Mysql
  • 28 tháng 09 2012
  • bởi Văn Khương
  • 0 Comments

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

  • Chia sẻ
comments powered by Disqus