渲染

使用主题定制核心功能

主题具有布局文件,除其他外,可用于更改页面上显示的块。块模板也可以更改,并调用不同的方法。

商店级设计

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() 指令