Magento布局文件中block,reference,action三种标签详解

今天和大家一起研究下这三个标签的意义和用法。

1. Block标签指明对应的Html数据块,在指定一个Block后,系统首先会根据该Block的配置生成一个html数据块,然后再继续解析它所包含的其他内容。

<block type="checkout/cart_sidebar" name="cart_sidebar" template="checkout/cart/sidebar.phtml" before="-">
    <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <block type="core/text_list" name="cart_sidebar.extra_actions" as="extra_actions" translate="label" module="checkout">
        <label>Shopping Cart Sidebar Extra Actions</label>
    </block>
</block>

如在解析type=”checkout/cart_sidebar” block的时候,首先在config.xml找到checkout的block所对应的半类名,得到Mage_Checkout_Block,再和 cart_sidebar组成全称类名为Mage_Checkout_Block_Cart_Sidebar,该Block类所对应的模板文件为 checkout/cart/sidebar.phtml,before=”-“表明在同级别上,它是排在最前面的。Name需要唯一,作为解析和引用使用。

然后在解析子Block时候,如type=”core/text_list”的Block,会告诉他的父节点cart_sidebar该子节点信息,这样,在父节点所对应的模板文件中,才能使用getChildHtml(“cart_sidebar.extra_actions”)函数调用子节点的 html信息。

如果有as节点,表示该节点可以在其他地方被引用,也就是说可以在其他地方再次解析,比如as=’left’,则可以在其他地方用reference中进行添加相关block操作。

2. Reference标签指明其他Block Name在该区域的一个引用,Reference所对应的Block一般都有as属性。一般也只有一个name值,表示这一Block会使用该Reference填充内容,将该Reference下的子Block作为对应Blok的子Block进行解析。

3. Action表明指定的Block执行一些特别的动作,比如添加js,css,给常量赋值,调用Block中对应的函数等。

<block type="core/template" name="right.permanent.callout" template="callouts/right_col.phtml">
    <action method="setImgSrc"><src>images/media/col_right_callout.jpg</src></action>
    <action method="setImgAlt" translate="alt" module="catalog"><alt>Keep your eyes open for our special Back to School items and save A LOT!</alt></action>
</block>

在Block当中调用Mage_Core_Block_Template类解析callouts/right_col.phtml。在该block 下的action中,没有指定节点,表明该action作用于上级Block即right.permanent.callout。在方法中使用 setImgSrc函数,那么对应的,可以在模板中使用getImgSrc获取到action中所包含的值。

在setImgAlt中,也可以使用getImgAlt获取值,不过其中使用translate属性和module属性,那么会调用Catalog中的Helper,对alt中的内容进行翻译成对应的本地化文字。

在addJs、addCss的代码一般在page/html_head类型的block当中,Magento首先会将所有文件存储在$_data当中,最终通过getCssJsHtml函数解析成对应的html代码输出。

Head中支持add类型的方法有addCss、addJs、addCssIe、addJsIe、addLinkRel五种。

<reference name="head">  
    <action method="addCss"><stylesheet>css/local.css</stylesheet></action>  
    <action method="addJs"><script>scriptaculous/controls.js</script></action>  
    <action method="addItem"><type>js</type><name>lib/ds-sleight.js</name><params/><if>lt IE 7</if></action>  
</reference>

通用的函数是addItem,需要指定type和name,如果有条件判断的话就放在if标签当中。

如果需要删除某个js或者css,可以使用removeItem方法。

其他的action函数需要看其type所对应的类中所支持的函数。

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

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

如果句柄的名称是<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 – 这是名称,其他的区块可以通过此名称引用此区块(如下图)。
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>(如图)。

Magento reference

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

未经允许不得转载:哈勃私语 » Magento布局文件中block,reference,action三种标签详解

本文共4398个字 创建时间:2018年9月30日17:10   

分享到:更多 ()