1

卡在这个问题上很久了:(我正在尝试覆盖核心模板文件

app/design/frontend/base/default/template/persistent/checkout/onepage/billing.phtml

使用我已成功激活的自定义模块,我的新模块的配置文件位于

应用程序/代码/本地/CustomCheckout/Checkout/etc/config.xml。

下面是内容

<config>
    <modules>
        <CustomCheckout_Checkout>
            <version>1.0.0</version>
        </CustomCheckout_Checkout>
    </modules>
    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                         <CustomCheckout_Checkout before="Mage_Checkout">CustomCheckout_Checkout</CustomCheckout_Checkout>
                    </modules>
                </args>
            </checkout>
        </routers>
        <layout>
            <updates>
                <checkout>
                    <file>persistent.xml</file>
                </checkout>
            </updates>
        </layout>       
    </frontend>
</config>

我正在尝试覆盖persistent.xml布局,该布局又调用上述billing.phtml 文件。我将新的布局文件放在以下位置

应用程序/设计/前端/默认/CustomCheckout/layout/persistent.xml。

下面是内容

<layout version="0.1.0">
    <checkout_onepage_index>
        <reference name="checkout.onepage.billing">
            <action method="setTemplate">
                <template>checkout/onepage/billing.phtml</template>
            </action>
        </reference>
    </checkout_onepage_index>
</layout>

我已将修改后的 billing.phtml 文件放在

app/design/frontend/default/CustomCheckout/template/checkout/onepage/billing.phtml

但它没有被捡起。我在挠头......任何帮助表示赞赏。

4

3 回答 3

4

希望你现在已经找到了答案,但是为了后代......

这里的问题是“持久”模块已经覆盖了该模板。如果您查看 persistent.xml 布局文件,您会看到以下内容:

    <reference name="checkout.onepage.billing">
        <action method="setTemplate"><template>persistent/checkout/onepage/billing.phtml</template></action>
        <block type="persistent/form_remember" name="persistent.remember.me" template="persistent/remember_me.phtml" />
        <block type="core/template" name="persistent.remember.me.tooltip" template="persistent/remember_me_tooltip.phtml" />
    </reference>

Magento 的默认加载顺序是按字母顺序排列的。因此,由于 Persistent 模块是“Mage_Persistent”而您的模块是“CustomCheckout_Checkout”,所以 Persistent 模块是最后加载的,它的覆盖是坚持的。

有几种解决方案。一种是重命名您的模块,使其在字母表中位于 Mage_Persistent 之后。

更好的解决方案是使用 Magento 的依赖功能。在您的模块声明文件 (app/etc/modules/CustomCheckout_Checkout.xml) 中,您可能有这样的内容:

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCheckout_Checkout>
            <active>true</active>
            <codePool>local</codePool>
        </CustomCheckout_Checkout>
    </modules>
</config>

修改它,如下所示:

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCheckout_Checkout>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Persistent />
            </depends>
        </CustomCheckout_Checkout>
    </modules>
</config>

这向 Magento 表明您的模块“依赖”于 Mage_Persistent,因此应该在它之后加载。

如果这对您不起作用,另一种技术是在您的布局 xml 中使用“删除”节点来摆脱原始计费块:

<remove name="checkout.onepage.billing" />

然后用不同的名称重新添加它,就像它在 checkout.xml 中一样。确保从各种布局文件中添加所有必要的块和操作,并使用相同的别名(as="billing")。

最后,如果此模块不打算重复使用(更改仅适用于您当前的安装),您可以简单地将 phtml 文件复制到自定义包/主题文件夹中的相同路径中。

于 2014-05-27T16:05:33.777 回答
0

我是magento开发人员。我确实在本地主机上解决了您的问题并找到了解决方案。我只是创建 kinex/链接(命名空间/模块)。在此模块布局文件中包含以下代码:

<checkout_onepage_index>
    <reference name="checkout.onepage.billing">
        <action method="setTemplate">
            <template>kinex/links/billing.phtml</template>
        </action>
    </reference>
</checkout_onepage_index>
于 2014-07-16T18:41:13.033 回答
0

This is very Simple, You can simply write the xml as:

 <checkout_onepage_index>
    <reference name="checkout.onepage.billing">
        <action method="setTemplate">
            <template>your-module/checkout/onepage/billing.phtml</template>
        </action>
        <block type="persistent/form_remember" name="persistent.remember.me" template="persistent/remember_me.phtml" />
        <block type="core/template" name="persistent.remember.me.tooltip" template="persistent/remember_me_tooltip.phtml" />
    </reference>
</checkout_onepage_index>

If there is some error in checkout page, then it means billing or shipping.phtml file is missing.

于 2014-10-29T04:36:45.577 回答