如何使用local.xml在Magento 1.5中设置默认布局?

时间:2011-04-05 11:00:58

标签: xml layout magento default

所以我已经完成了一些我想要使用的布局,并且我认为在local.xml文件中设置它会为每个页面修复此问题。喜欢这个

<default>
<reference name="root">
    <action method="setTemplate">
      <template>page/mytheme.phtml</template>
    </action>
</reference>
</default>

然而,这没有做任何事情。相反,如果我去

...<customer_account_forgotpassword>
  <reference name="root">
    <action method="setTemplate"><template>page/mytheme.phtml</template></action>
  </reference>
</customer_account_forgotpassword>  

<customer_account_confirmation>
  <reference name="root">
    <action method="setTemplate"><template>page/mytheme.phtml</template></action>
  </reference>
</customer_account_confirmation>...
对于每个特定地点,

等等都会在这些特定页面上进行更改。我是在想错还是这是唯一的方法呢?

4 个答案:

答案 0 :(得分:11)

您(可能)遇到的问题是稍后会出现问题并为根块设置的模板,从而覆盖您的更改。

更新版本的Magento(1.4somethingish)介绍了一种防止这种情况发生的方法。如果您查看page.xml,就会看到像这样的句柄

<page_one_column translate="label">
    <label>All One-Column Layout Pages</label>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
        <!-- Mark root page block that template is applied -->
        <action method="setIsHandle"><applied>1</applied></action>
    </reference>
</page_one_column>

如果page_one_column句柄应用于您的请求,或者您手动将其应用于

<update handle="page_one_column" />

Magento将更改模板调用块上的setIsHandle方法。

<action method="setIsHandle"><applied>1</applied></action>

Magento中的代码将查找IsHandle属性,如果是,则将忽略对setTemplate的进一步调用。 (这有点过分简化了事情,但或多或​​少都是真的)

尝试类似

的内容
<default>
    <reference name="root">
        <action method="setTemplate">
          <template>page/mytheme.phtml</template>
        </action>
        <action method="setIsHandle">
            <applied>1</applied>
        </action>       
    </reference>
</default>  

看看是否有帮助。

请记住,这是一个灰色地带,目前尚不清楚第三方开发商是否应该采取行动。此外,更改所有网页的模板可能会对预期位于特定模板中的网站部分产生不良影响。

答案 1 :(得分:2)

实际上,你是在正确的轨道上。您刚刚没有在local.xml上指定请求。您还应该包括您要求覆盖的请求。

以下是local.xml

的示例代码
<layout>
    <default>
    ....
    </default>

    <!-- Update Configuration for this request specially -->
    <customer_account_confirmation> 
      <reference name="root">
        <action method="setTemplate"><template>page/mytheme.phtml</template></action>
      </reference>
    </customer_account_confirmation>

</layout>

这么多配置足够来做你需要的。

答案 2 :(得分:1)

是的,似乎您必须将其添加到某些单独的句柄本身。那是因为<default>句柄是第一个被加载的句柄。 <customer_account_forgotpassword>句柄仅在稍后阅读。如果您检查文件design/frontend/base/default/layout/customer.xml,您会看到这个相同的句柄设置的模板与<default>不同。

请看Magento为“忘记密码”页面读取布局句柄的顺序示例:

1. default
2. STORE_default
3. THEME_frontend_default_babel
4. customer_account_forgotpassword
5. customer_logged_out

在那里,您可以看到为什么<default>句柄的模板设置被覆盖。

我建议您使用Alan Storm的Magento布局查看器模块:http://alanstorm.com/layouts_blocks_and_templates

答案 3 :(得分:0)

我有类似的问题,并认为它可能会节省一些人的时间。
试图将1column布局设置为 cms页面。在我意识到之前,没有一个解决方案有效:左 CMS页面模板是从Admin CMS > Pages > Design > Layout设置的,而不是local.xml。
如果为{{1}设置模板<default>中的句柄,它没有帮助,因为从每个特定CMS页面的管理页面中选择的布局句柄将覆盖这一点。