对初学magento开发很有用的原理解析

来源:互联网 发布:淘宝遇到诈骗怎么办 编辑:程序博客网 时间:2024/05/21 10:31
 

一些布局标签的知识


<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调用该页面的过程


例子:访问URL    http://localhost/magento/index.php/customer/account/create/


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代码  

  1. <customer_account_create>  
  2.   <!-- Mage_Customer -->  
  3.   <remove name="right"/>  
  4.   <remove name="left"/>  
  5.   
  6.   <reference name="root">  
  7.     <action method="setTemplate">  
  8.         <template>/page/1column.phtml</template>  
  9.      </action>  
  10.   </reference>  
  11.   <reference name="content">  
  12.     <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"/>  
  13.   </reference>  
  14. </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应用


1. 以上面url为基础,定义一个新的block文件: app\code\core\Mage\Customer\Block\Form\Register1.php


  1. class Mage_Customer_Block_Form_Register1 extends Mage_Directory_Block_Data{  
  2.     public function getHello(){  
  3.         return "Hello Block";  
  4.     }  
  5. }  


2. 定义template文件:app\design\frontend\default\default\template\customer\form\register1.phtml

Html代码  
  1. <?php echo $this->getHello(); ?> 

3. 修改customer.xml配置


Xml代码  

  1. <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"/>  

修改为
Xml代码  
  1. <block type="customer/form_register1" name="customer_form_register1" template="customer/form/register1.phtml"/>  

重新访问该url就能访问你自己定义的block了