渲染
使用主題定製核心功能
主題具有佈局檔案,除其他外,可用於更改頁面上顯示的塊。塊模板也可以更改,並呼叫不同的方法。
商店級設計
Magento 的分層結構化主題意味著可以在商店級別擴充套件和分配基本主題。
註冊自定義主題
主題可以通過三種方式配置:
- 系統>配置>設計下的每個儲存。
- 設計更改時間限制系統>設計。
- 主題例外也可以在類別和產品級別設定。
包與主題
包有多個主題。包中的每個主題都繼承自包中的預設主題。
設計後備
用於查詢模板檔案的主題回退過程是:
- {包} / {主題}
- {包} /預設
- 基地/預設
要向主題回退機制新增更多目錄,需要重寫 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()
指令