cakephp劄記——view層2

來源:互聯網
上載者:User
cakephp筆記——view層2
CakePHP 的視圖層可以由不同的部分構成。每一部分有不同的用途。
  • views:視圖是動作啟動並執行唯一的頁面部分。它們構成了應用程式的響應。
  • elements:小的可重用的視圖代碼。元件通常在視圖內部渲染。
  • layouts: 應用程式中打包了呈獻邏輯的一些視圖介面檔案。多數視圖在布局內部渲染。
  • helpers:這些類封裝了視圖層的許多地方都使用的視圖邏輯。除了其它事項,CakePHP 的助手協助你建立表單、構建 AJAX 功能、分頁模型資料,或者提供 RSS feed。


    使用視圖塊

    視圖塊放在 $scripts_for_layout,並提供一個允許你在視圖/布局中任意位置定義插槽或者塊的靈活的 API。 塊是實作類別似側邊欄這樣的東東的理想方法,或者是在布局的頭/尾載入資源的好地方。塊有兩種定義方式:作為捕獲塊,或者通過直接賦值。start()、 append() 和 end() 方法是和捕獲塊一同工作的:

     1 // 建立一個側邊欄塊 2 $this->start('sidebar'); 3 echo $this->element('sidebar/recent_topics'); 4 echo $this->element('sidebar/recent_comments'); 5 $this->end(); 6  8 // 隨後添加一個側邊欄 9 $this->append('sidebar');10 echo $this->element('sidebar/popular_topics');11 $this->end();

    也可以多次使用 start() 添加進一個塊。 任何時候都可以使用 assign() 清除或者覆蓋一個塊:

    1 // 清除之前定義的側邊欄塊的內容。2 $this->assign('sidebar', '');

    在 2.3 版本中,新加了幾個與塊一同工作的方法。prepend() 預置一個已存在的塊的內容:

    1 // 預置到側邊欄。2 $this->prepend('sidebar', 'this content goes on top of sidebar');

    startIfEmpty() 方法在一個塊為空白或者未定義時產生一個塊。如果塊已經存在,則 startIfEmpty() 定義的內容被忽略。當你想要在塊不存在時為其定義預設內容時,可以使用這一方法::

     1 // 在視圖檔案中。 2 // 建立一個導覽列塊。 3 $this->startIfEmpty('navbar'); 4 echo $this->element('navbar'); 5 echo $this->element('notifications'); 6 $this->end(); 7  8 // 在父視圖/布局中。 9 $this->startIfEmpty('navbar');10 Default content11 $this->end();12 13 echo $this->fetch('navbar');

    上面的例子中,navbar 塊包含在第一部分中添加的內容。一旦在子視圖中定義了這個塊,其預設內容將被忽略。

    顯示塊

    可以使用 fetch() 方法顯示塊。 fetch 將安全地輸出一個塊,如果塊不存在,就返回 ‘’。

    1 echo $this->fetch('sidebar');

    還可以根據一個塊是否存在來決定是否顯示其內容。要想在布局、繼承視圖檔案中有條件的顯示頭或者其它標籤時,這種方法非常有用:

    1 // 在 app/View/Layouts/default.ctp 中2 if ($this->fetch('menu')): ?>3 class="menu">4     

    Menu options

    5 echo $this->fetch('menu'); ?>6 7 endif; ?>

    在 2.3.0 版,還可以在塊沒有內容時為其提供預設值。這使為空白狀態添加預留位置變得更容易。可以使用兩個參數提供預設值:

    1 class="shopping-cart">2     

    Your Cart

    3 echo $this->fetch('cart', 'Your cart is empty');4

    使用 script 和 CSS 檔案塊

    塊替代了被廢棄的 $scripts_for_layout 布局變數。HtmlHelper 關聯到視圖塊,它的 script() 、 css() 和 meta()方法在與 inline = false 選項共同使用時使用相同的相同的名字更新一個塊。

     1  2 // 在視圖檔案中。 3 $this->Html->script('carousel', array('inline' => false)); 4 $this->Html->css('carousel', null, array('inline' => false)); 5 ?> 6  7 // 在布局檔案中。 8  9 10     11     <?php <span style="color:rgb(0,0,255)">echo</span> <span style="color:rgb(128,0,128)">$this</span>->fetch('title'); ?>12       echo $this->fetch('script'); ?>13       echo $this->fetch('css'); ?>14     15     // 下面是剩餘的布局尊容...

    HtmlHelper 還允許你控制使用哪個 scripts 和 CSS 塊:

    1 // 在視圖檔案中。2 $this->Html->script('carousel', array('block' => 'scriptBottom'));3 4 // 在布局檔案中。5 echo $this->fetch('scriptBottom');

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.