渲染

使用主題定製核心功能

主題具有佈局檔案,除其他外,可用於更改頁面上顯示的塊。塊模板也可以更改,並呼叫不同的方法。

商店級設計

Magento 的分層結構化主題意味著可以在商店級別擴充套件和分配基本主題。

註冊自定義主題

主題可以通過三種方式配置:

  1. 系統>配置>設計下的每個儲存。
  2. 設計更改時間限制系統>設計。
  3. 主題例外也可以在類別和產品級別設定。

包與主題

包有多個主題。包中的每個主題都繼承自包中的預設主題。

設計後備

用於查詢模板檔案的主題回退過程是:

  1. {包} / {主題}
  2. {包} /預設
  3. 基地/預設

要向主題回退機制新增更多目錄,需要重寫 Mage_Core_Model_Design_Package::getFilename 方法

對於管理區域,後備是預設/預設。

模板和佈局路徑

塊用於輸出。根塊是所有塊的父節點,型別為 Mage_Page_Block_Html。

Mage_Core_Block_Template 塊使用模板檔案來呈現內容。模板檔名在 setTemplate() 或 addData(’template’)中設定,具有相對路徑。

模板只是 Mage_Core_Block_Template 中包含的 PHP 部分。因此,模板中的$ this 指的是塊。

Mage_Core_Block_Template 在包含模板之前使用緩衝區以防止過早輸出。

Mage_Core_Model_Layout::createBlock 方法建立塊的例項。

Mage_Core_Model_Layout_Update 類通過檢視佈局控制代碼來考慮需要為每個頁面建立哪些塊。

渲染所有輸出塊,例如通過呼叫 toHtml(),然後可以選擇渲染他們的子節點。

Text 和 Text_List 塊自動呈現其內容。

在塊渲染周圍有兩個事件可以用來在渲染 HTML 之前和之後修改塊:

core_block_abstract_to_html_before core_block_abstract_to_html_after 子塊只有在 Mage_Core_Block_Textlist 類時才會自動呈現,否則需要呼叫 getChildHtml 方法。

可以通過佈局訪問塊例項,例如 Mage :: app() - > getLayout() 和$ controller-> getLayout()。塊輸出由 _toHtml() 函式控制。

模板由模板塊內的 renderView()/ fetchView() 方法呈現。可以使用$ layout-> setDirectOutput 禁用輸出緩衝。

可以在當前佈局中新增塊,但需要在呼叫 renderLayout() 方法之前完成。

佈局 XML

<reference>
  -edit a block
<block>
  - define a block 
<action>
  - call method on a block
<update>
  - include nodes from another handle.

佈局檔案可以在 config.xml 中註冊:

<config>
    <{area}>
        <layout>
            <updates>
                <{name}>
                    <file>{filepath}</file>
                </{name}>
            </updates>
        </layout>
    </{area}>
</config>

頁面輸出可以通過以下方式自定義:

  • 模板更改
  • 佈局更改
  • 覆蓋塊
  • 可以通過以下方式設定塊上的觀察者變數:
  • 佈局 - 通過操作或屬性
  • 控制器 - $ this-getLayout() - > getBlock()
  • 子塊 - $ this-> getChild()
  • 其他 -Mage :: app() - > getLayout()

頭部資產

JavaScript 和 CSS 資產在 Mage_Page_Block_Html_head 塊中處理。此塊處理將資產合併到單個檔案中以最小化 HTTP 請求。合併檔案基於原始檔的編輯時間。

合併 CSS 時,呼叫 Mage_Core_Model_Design_Package 上的回撥函式來更新任何帶有正確 URL 的 @import 或 url() 指令