为此,我有以下文件
app/ etc/ modules/ - IT_CustomerCar.xml code/ local/ IT/ CustomerCar/ Block/ Customer/ From/ Login.php controllers/ - AccountController.php etc/ - config.xml design/ frontend/ base/ default/ layout/ - customercar.xml template/ customercar/ form/ - login.phtml'
我的目标是覆盖/design/frontend/base/default/layout/customer.xml文件以个性化登录表单.
现在,更具体地说明我的文件
config.xml包含以下行:
<config> <modules> <it_customercar> <version>0.1.0</version> </it_customercar> </modules> <global> <rewrite> <it_customercar_customer_account> <from><![CDATA[#^/customer/account/#]]> </from> <to>/customercar/account/</to> </it_customercar_customer_account> </rewrite> <blocks> <customer> <rewrite> <form_login>IT_CustomerCar_Block_Customer_Form_Login</form_login> </rewrite> </customer> <helpers> <customercar> <class>It_CustomerCar_Helper</class> </customercar> </helpers> </blocks> </global> <frontend> <routers> <it_customercar> <use>standard</use> <args> <module>IT_CustomerCar</module> <frontName>customercar</frontName> </args> </it_customercar> </routers> <layout> <updates> <it_customercar> <file>customercar.xml</file> </it_customercar> </updates> </layout> </frontend>
我的customercar.xml(假设是我的xml布局文件)如下:
<?xml version="1.0"?> <layout version="0.1.0"> <default> </default> <customercar_account_login> <label>MODULE : Customer Account Login Form</label> <reference name="content"> <block type="core/template" name="customercar_form_login" output="toHtml" template="customercar/form/login.phtml" ></block> </reference> </customercar_account_login> </layout>
在我的块上,IT_CustomerCar_Block_Customer_Form_Login,我添加此行返回$html. ‘块’;检查它是否确实被调用.它是.正如预期的那样,在我的登录表单下面有一个“阻止”字符串.
另一方面,似乎忽略了customercar.xml文件.我使用Allan Storm LayoutViewer模块检查我的页面,布局仍然是核心的布局.
编辑:我还添加了一个var_dump($this-> getTemplate());来自Block类的_toHtml方法.它显示了line:string(36)“persistent / customer / form / login.phtml”.我真的不明白为什么顺便说一句.我期望“/customer/form/login.phtml”,而不是“持久性”文件夹中的那个.
我想我错过了一些明显的东西,但我试图从论坛和教程中听取很多建议而没有任何成功.这个问题似乎很常见,我想我可以快速修复它.我错了…
我希望你能帮到我,
谢谢 :)
解
我设法用dagfr答案解决这个问题.
首先,我从后端和/app/etc/modules/Mage_Persistent.xml中禁用持久性模块.
然后,我更改了我的customercar.xml文件
<customer_account_login> <reference name="customer_form_login"> <action method="setTemplate"><template>customercar/form/login.phtml</template></action> </reference>1)你必须删除持久性的东西,它不会帮助找到问题,因为它没有使用正确的模板.
2)您所做的更改将使用您的模板而不是yoursite.com/customer/account/login页面进行yoursite.com/customercar/account/login页面.这是你需要的吗?
3)你使用:
<block type="core/template" name="customercar_form_login" output="toHtml" template="customercar/form/login.phtml" ></block>
这不应该是核心/模板块,而是customer / form_login块(由块覆盖).
4)您更改其名称,因此如果您在正确的文件中没有getChildHtml,则不会调用它.
总而言之,你应该这样做:
<customer_account_login> <reference name="customer_form_login"> <action method="setTemplate"><template>customercar/form/login.phtml</template></action> </reference> </customer_account_login>
这将说明登录块(被覆盖的)在原始页面中使用您的新模板