【问题标题】:How to set a default layout in Magento 1.5 using local.xml?如何使用 local.xml 在 Magento 1.5 中设置默认布局?
【发布时间】:2011-07-29 21:01:44
【问题描述】:

所以我做了一些我想使用的布局,我想在你的 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>...

对于每个特定位置,它在这些特定页面上都会发生更改,依此类推。我想错了还是这是唯一的方法?

【问题讨论】:

    标签: xml layout magento default


    【解决方案1】:

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

    最新版本的 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>  
    

    看看有没有帮助。

    请记住,这是尚不清楚第三方开发人员是否应该涉足的灰色区域之一。此外,更改所有页面的模板可能会对网站中预期使用特定模板的部分产生不良影响。

    【讨论】:

    • 很可惜,setIsHandle 方法用于不同的目的。它背后的想法只是为了保持页面布局向后兼容,因为以前的版本可以只设置模板,但后来改为处理,更灵活。如果 is_handle 属性设置为 true,它只是不会在页面/布局助手中设置模板,但它会应用设置模板的页面句柄,所以无论如何都会设置模板,就像它的设置方式一样不同。
    【解决方案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>
    

    这么多配置足够做,你需要什么。

    【讨论】:

      【解决方案3】:

      是的,您似乎必须将其添加到某些单独的句柄本身。那是因为&lt;default&gt; 句柄是第一个加载的句柄。 &lt;customer_account_forgotpassword&gt; 句柄仅在以后读取。如果您检查文件design/frontend/base/default/layout/customer.xml,您会发现这个句柄设置的模板与&lt;default&gt; 不同。

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

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

      你可以看到为什么&lt;default&gt;句柄的模板设置被覆盖了。

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

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题,并认为这可能会节省一些人的时间。
        正在尝试将 1column 布局设置为 cms 页面。在我意识到之前,所有解决方案都不起作用:
        CMS 页面模板是从管理员设置的 CMS &gt; Pages &gt; Design &gt; Layout,而不是 local.xml。
        如果您在 @987654324 中为 &lt;default&gt; 设置模板句柄@,它没有帮助,因为这将被从每个特定 CMS 页面的管理页面中选择的布局句柄覆盖。

        【讨论】:

          猜你喜欢
          • 2019-01-21
          • 2014-02-25
          • 2011-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          • 2012-03-28
          相关资源
          最近更新 更多