渲染
使用主题定制核心功能
主题具有布局文件,除其他外,可用于更改页面上显示的块。块模板也可以更改,并调用不同的方法。
商店级设计
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()
指令