如果你在本机的虚拟目录下建立了自己的magento项目,这里以项目名为magento为例,那么访问:
http://localhost/magento/index.php/customer/account/create/ 将进入用户注册界面。
下面就从URL尝试分析Magento调用该页面的过程
- 1. URL中的customer表明当前访问的模块是customer,自动定位到: app\code\core\Mage\Customer
- 2. URL中的account表明当前访问的控制器文件为AccountController.php app\code\core\Mage\Customer\controllers\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 translate="label">
<label>Customer Account Registration Form</label>
<!-- 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">
<block type="page/html_wrapper" name="customer.form.register.fields.before" as="form_fields_before" translate="label">
<label>Form Fields Before</label>
</block>
</block>
</reference>
</customer_account_create>
<reference name="root"> 用来说明你要使用的布局文件。
<reference name="content">下的block就是你定义的block
上面的block是默认定义,可以由customer/form_register推测出来,block类文件位置: app\code\core\Mage\Customer\Block\Form\Register.php
template属性可找出出相应的模板文件为: app\design\frontend\default\default\template\customer\form\register.phtml
通过这样的配置block和template就联系起来了,可以在template文件中使用$this来访问block类的方法。
下面我们实现一个新的block应用
1. 定义一个新的block文件:
app\code\core\Mage\Customer\Block\Form\Register1.php
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"/>
修改为:
<block type="customer/form_register1" name="customer_form_register1" template="customer/form/register1.phtml"/>