一些布局标签的知识
<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 - 这个属性指定的值决定了此区块的功能是使用哪个模板。例如,如果这个属性值指定了'de>catalog/category/view.phtmlde>',程序就会载入‘de>app/design/frontend/template/catalog/category/view.phtmlde>’模板文件。要了解布局是如何通过模板执行的,阅读分步指南建设一个主题。
- action – <action> 是用来控制前台的功能的,如加载或不加载一个JavaScript。一套完整的action方式将很快推出,但此时的最佳的学习途径是了解现有的布局更新上面的不同Action方法。
- as – 此属性指定模板文件中会调用那个区块。当您在模板中看到getChildHtml(' block_name ')的PHP方法,可以肯定它指的是引用属性'as'的值为' block_name '的区块。 (例如:在骨架模板中的方法<?=$this->getChildHtml('header')?>是调用<block as=“header”>)
<reference>
<reference>是用来引用另一个区块。要引用另一个区块,在内部的更新将应用于与其关联的<block>。要使用引用,可以通过区块中的‘name’属性值引用。此属性的指向标签中'name'属性。所以,如果你使用<reference name="right">,响应的区块名称将是<block name="right">。
从URL尝试分析Magento调用该页面的过程
1. URL中的customer表明当前访问的模块是customer,自动定位到:app\code\core\Mage\Customer
2. URL中的account表明当前访问的控制器文件为AccountController.php
3.URL中的create表明当前访问的php方法是createAction(),该方法在文件app\code\core\Mage\Customer\controllers\AccountController.php
4. createAction()装载目录\app\design\frontend\default\default\layout\下名字和模块名相同的layout文件,名字为customer.xml。然后寻找名字为<customer_account_create>的标签
Xml代码
- <customer_account_create>
- <!-- Mage_Customer -->
- <remove name="right"/>
- <remove name="left"/>
- <reference name="root">
- <action method="setTemplate">
- <template>/page/1column.phtml</template>
- </action>
- </reference>
- <reference name="content">
- <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"/>
- </reference>
- </customer_account_create>
<reference name="root"> 用来说明你要使用的布局文件。
<reference name="content">下的block就是你定义的block
上面的block是默认定义,block类文件可以由customer/form_register推测出来: app\code\core\Mage\Customer\Block\Form\Register.php
template属性推导出相应的模板文件为 app\design\frontend\default\default\template\customer\form\register.phtml
实现一个新的block应用
- class Mage_Customer_Block_Form_Register1 extends Mage_Directory_Block_Data{
- public function getHello(){
- return "Hello Block";
- }
- }
2. 定义template文件:app\design\frontend\default\default\template\customer\form\register1.phtml
Html代码
- <?php echo $this->getHello(); ?>
3. 修改customer.xml配置
Xml代码
- <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"/>
修改为
Xml代码
- <block type="customer/form_register1" name="customer_form_register1" template="customer/form/register1.phtml"/>
重新访问该url就能访问你自己定义的block了