OctoberCMS-6-佈局

Tianby發表於2019-02-16

Layout

概述

Layout,此處稱為佈局。定義了一個頁面框架,即頁面上的所有的重複的內容,例如header部分和footer部分。Layout通常包含HTML標籤、HEAD標籤、TITLE標籤和BODY標籤。

位置:安裝的主題的目錄,layout子目錄中。

副檔名:htm

Layout中輸出內容應該使用page標籤進行頁面內容輸出。{% page %};最近簡單的方式:

<html>
    <body>
        {% page %}
    </body>
</html>

Page與Layout關係,Page可以使用不同的Layout,Layout也可以通過Page來引用多個page頁面。但是,他們之間建立聯絡的是Page中的設定,然後Layout中的{% page %}才能正確的引用這個page,才可以通過Page的URL結合Layout佈局把頁面顯示出來。

要為一個Page使用Layout,Page的Configuration Section部分必須引用Layout檔名稱(不帶副檔名)。請記住,如果從子目錄引用Layout,則應指定子目錄名稱。使用default.htm的Layout的示例頁面模板:

url = "/"
layout = "default"
==
<p>Hello, world!</p>

當請求該頁面時,其內容與Layout合併,或者更確切地說 – Layout的{% page %}標籤被頁面內容替換。前面的示例會生成以下標記:

<html>
    <body>
        <p>Hello, world!</p>
    </body>
</html>

請注意,您可以在Layout中渲染部件。這使您可以在不同的Layout之間共享常用元素。例如,您可以有一個輸出網站CSS和JavaScript連結的部件。這種方法簡化了資源的管理。 如果你想新增一個JavaScript引用,你應該修改一個小部件,而不是編輯所有的Layout。

佈局中的配置區域是可選的,支援name和description。

description = "Basic layout example"
==
<html>
    <body>
        {% page %}
    </body>
</html>

Placeholders

Placeholders這裡稱為【佔位符】,可以允許頁面將內容注入到佈局中。佔位符在佈局模板中用{% placeholder %}標籤定義。下面的例子顯示了一個在HTML HEAD部分中定義了一個叫head的【佔位符】的Layout模板。

<html>
    <head>
        {% placeholder head %}
    </head>
    ...

頁面可以使用{% put %}和{% endput %}標籤將內容注入【佔位符】。以下示例演示了一個簡單的頁面模板,它將CSS連結注入前一示例中定義的叫head佔位符。

url = "/my-page"
layout = "default"
==
{% put head %}
    <link href="/themes/demo/assets/css/page.css" rel="stylesheet">
{% endput %}

<p>The page content goes here.</p>

動態佈局

和Page一樣,Layout可以使用任何Twig特性。

佈局的執行生命週期

佈局中的PHP程式碼部分,可以定義頁面周期函式:

onInit當所有元件被初始化並且在處理AJAX請求之前,該函式被執行。

onStart功能在頁面處理開始時執行。

onBeforePageStart函式在Layout元件執行後執行,但在頁面的onStart函式執行之前執行。

onEnd函式在頁面呈現後執行。

處理程式執行的順序如下:

  1. Layout onInit() function.
  2. Page onInit() function.
  3. Layout onStart() function.
  4. Layout components onRun() method.
  5. Layout onBeforePageStart() function.
  6. Page onStart() function.
  7. Page components onRun() method.
  8. Page onEnd() function.
  9. Layout onEnd() function.