magento布局是如何工作的

来源:互联网 发布:淘宝自动提交订单 编辑:程序博客网 时间:2024/05/22 05:24

布局是如何工作的(How Layout Works)

<!-- start node.tpl.php -->

布局(Layout)是Magento应用中的一个虚拟组件。通过修改了部分的布局,您可以为店铺页面建立升级兼容的页面修改。

布局是由默认布局和更新布局组成,它们都是一些易于学习XML标记。通过这些布局的命令,您可以修改/指定的内容区块和结构区块的关系,并控制前台店铺的功能,例如可以在具体的页面中加载和不加载的具体Javascripts文件。

布局文件是根据模块分开的,每一个模块带来了自己的布局文件(例如' catalog.xml '是一个分类模块的布局文件, 'customer.xml'是客户模块的布局文件...等)。这些布局文件位于app/design/frontend/your_interface/your_theme/layout/ 中和每个文件是进一步分开处理(见图1),每个处理(除了<default>)指定其在店铺特定页面的嵌套更新。

一些布局文件中可能包含了<default>处理。在解析布局文件时, Magent首先寻找分配到<default>的更新布局处理几乎所有的布局文件,读取他们的命令,在app/etc/modules/Mage_All.xml中指定。然后解析特定页面布局更新,最后建立一个商店的页面。

Magento系统使用这种方式,以便无缝添加和删除模块而不影响其它模块的系统。

 

 

布局原理解析(Anatomy of Layout)

<!-- start node.tpl.php -->
<!-- google_ad_section_start -->

Magento中的布局(Layout)包含一小部分的标记集合,作为详细说明关于程序如何建立一个页面,如何建立它的行为和每个构建的区块。最佳的布局途径是在每个角度正确的划分和使用。为了让您能够做到这一点,下面是一些行为特性的布局XML标记。


句柄(Handle)

Handle (图1)是一个标识符,决定应用程序要如何通过嵌套的更新处理它。

如果句柄的名称是<default>,然后应用程序知道在加载网店的几乎所有页面之前应该加载此特定页面布局的嵌套更新(我们说'几乎所有的',因为一些特殊的页面像产品图片弹出窗口就没有加载布局中的<default>句柄)。

如果Magento找到<default>以外的句柄,它将按照指定的句柄中的页面嵌套更新对页面进行处理。例如,<catalog_product_view>包含Product View页面的布局更新,而<catalog_product_compare_index>包含Compare Product 页面的更新布局。句柄作为设计人员设置在网店中的标识符,他不需要广泛的理解 Magento编程,也不应该需要修改。


<block>

Magento通过<block>标记决定页面中的每个区块的行为和视觉表现。在Magento中我们已经提到了两种类型的区块-结构区块(structural blocks)内容区块(content blocks)。区分这两种区块最好的方式是通过分配给它的标记属性来区分。结构区块通常包含属性'as',通过这个属性值程序可以与指定的区域(由getChildHtml方法指定)中的模板联系。你会发现在默认布局许多地方出现这个'as'属性,因为默认布局的一个性质就是是建立一个实际的布局,在各个不同的页面中的具体布局上就可以开始增加。例如,在默认布局中,有像‘left’、‘right’、‘content’和‘footer’这些结构区块。并不是说这些区块不能存在于正常的布局更新中,但我们为什么不首先在默认布局中建立这些结构区块,然后在后面每个具体的页面基础上添加内容呢?让我们进一步挖掘<block>的现有属性。

  • type – 这是模块类的标识符,它定义了区块的功能。此属性不应该被修改。
  • name – 这是名称,其他的区块可以通过此名称引用此区块(看图3)。
  • before (and) after – 这两种方法决定内容区块在结构区块中的位置。before="-" 和 after="-"这样的命令标志此区块的位置是一个结构区块的最上方或最下方。
  • template - 这个属性指定的值决定了此区块的功能是使用哪个模板。例如,如果这个属性值指定了'catalog/category/view.phtml',程序就会载入‘app/design/frontend/template/catalog/category/view.phtml’模板文件。要了解布局是如何通过模板执行的,阅读分步指南建设一个主题
  • action – <action> 是用来控制前台的功能的,如加载或不加载一个JavaScript。一套完整的action方式将很快推出,但此时的最佳的学习途径是了解现有的布局更新上面的不同Action方法。
  • as – 此属性指定模板文件中会调用那个区块。当您在模板中看到getChildHtml(' block_name ')的PHP方法,可以肯定它指的是引用属性'as'的值为' block_name '的区块。 (例如:在骨架模板中的方法<?=$this->getChildHtml('header')?>是调用<block as=“header”>)

<reference>

<reference>是用来引用另一个区块。要引用灵位一个区块,在内部的更新将应用于与其关联的<block>(见图3)。

要使用引用,可以通过区块中的‘name’属性值引用。此属性的指向标签中'name'属性。所以,如果你使用<reference name="right">,响应的区块名称将是<block name="right">。

图3: