Magento我的帐户布局XML问题 [英] Magento My Account Layout XML Problem

查看:71
本文介绍了Magento我的帐户布局XML问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使customer.xml布局文件在客户的我的帐户"页面上正常工作时遇到问题.

I'm having issues getting the customer.xml layout file to work properly for the customer's "my account" pages.

导航链接和通常位于页面左侧的先前订购的项目不会显示在页面上,但是如果我在xml文件中将引用名称更改为"content",则会显示出来(除非很明显是在右侧).我已经检查了它所引用的模板(2columns-left.phtml),并且getChildHtml('left')在正确的位置.

The navigation links and the previously ordered items that are usually on the left hand side of the page won't show up on the page, but if I change the reference name to "content" in the xml file, it shows up (except it's obviously then on the right hand side). I've checked the template it's referencing (2columns-left.phtml), and the getChildHtml('left') is there in the correct position.

导致问题的块:

<customer_account>
    <!-- Mage_Customer -->
    <reference name="root">
        <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
    </reference>

    <reference name="left">
        <action method="unsetChild"><name>catalog.navigation.all</name></action>
        <action method="unsetChild"><name>callout.sendcard</name></action>
        <action method="unsetChild"><name>callout.specialorder</name></action>
        <block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
            <action method="addLink" translate="label" module="customer"><name>account</name><path>customer/account/</path><label>Account Dashboard</label></action>
            <action method="addLink" translate="label" module="customer"><name>account_edit</name><path>customer/account/edit/</path><label>Account Information</label></action>
            <action method="addLink" translate="label" module="customer"><name>address_book</name><path>customer/address/</path><label>Address Book</label></action>
        </block>
        <block type="sales/reorder_sidebar" name="sale.reorder.sidebar" as="reorder" template="sales/reorder/sidebar.phtml"/>
        <remove name="tags_popular"/>
    </reference>
</customer_account>

这基本上是直接复制自我们其中一个100%有效的网站.我已经尝试了所有我能想到的一切(例如,在模板和布局xml中都更改了引用的名称)无济于事.布局所引用的模板显然可以正常工作,因为它们放在内容"区域时确实会显示出来.

This was basically copied straight over from another one of our sites where this works 100%. I've tried everything I can think of (changing the name of the reference in both the template and the layout xml, for example) to no avail. The templates that the layout is referencing are obviously working because they do show up when put into the "content" area.

此magento安装版本为1.3.1.1.

This installation of magento is version 1.3.1.1.

感谢您给我的任何建议...

I appreciate any advice you have to give me...

更新:我尝试将对"global_messages"的引用更改为,但也没有显示该引用.它似乎仅在内容"部分中起作用.

更新2:这些是与Alan Storm的非常方便的调试模块一起使用时在页面上使用"showLayout = page"查询字符串的结果(您将在下面的答案中找到).

    <?xml version="1.0"?>
<layout><block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
    <block type="page/html_head" name="head" as="head">
        <action method="addJs">
            <script>prototype/prototype.js</script>
        </action>
        <action method="addJs">
            <script>prototype/validation.js</script>
        </action>

        <action method="addJs">
            <script>paypoint/validation.js</script>
        </action>
        <action method="addJs">
            <script>scriptaculous/builder.js</script>
        </action>
        <action method="addJs">
            <script>scriptaculous/effects.js</script>

        </action>
        <action method="addJs">
            <script>scriptaculous/dragdrop.js</script>
        </action>
        <action method="addJs">
            <script>scriptaculous/controls.js</script>
        </action>
        <action method="addJs">

            <script>scriptaculous/slider.js</script>
        </action>
        <action method="addJs">
            <script>varien/js.js</script>
        </action>
        <action method="addJs">
            <script>varien/form.js</script>

        </action>
        <action method="addJs">
            <script>varien/menu.js</script>
        </action>
        <action method="addJs">
            <script>mage/translate.js</script>
        </action>
        <action method="addJs">

            <script>mage/cookies.js</script>
        </action>
        <action method="addCss">
            <stylesheet>css/reset.css</stylesheet>
        </action>
        <action method="addCss">
            <stylesheet>css/boxes.css</stylesheet>

        </action>
        <action method="addCss">
            <stylesheet>css/clears.css</stylesheet>
        </action>
        <action method="addCss">
            <stylesheet>css/menu.css</stylesheet>
        </action>
        <action method="addCss">

            <stylesheet>css/calendar-blue.css</stylesheet>
        </action>
        <action method="addCss">
            <stylesheet>css/styles.css</stylesheet>
        </action>
        <action method="addItem">
            <type>skin_css</type>

            <name>css/iestyles.css</name>
            <params/>
            <if>IE</if>
        </action>
        <action method="addItem">
            <type>skin_css</type>
            <name>css/ie7.css</name>

            <params/>
            <if>IE 7</if>
        </action>
        <action method="addItem">
            <type>skin_css</type>
            <name>css/ie7minus.css</name>
            <params/>

            <if>lt IE 7</if>
        </action>
        <action method="addItem">
            <type>js</type>
            <name>lib/ds-sleight.js</name>
            <params/>
            <if>lt IE 7</if>

        </action>
        <action method="addItem">
            <type>js</type>
            <name>varien/iehover-fix.js</name>
            <params/>
            <if>lt IE 7</if>
        </action>

        <action method="addCss">
            <stylesheet>css/print.css</stylesheet>
            <params>media="print"</params>
        </action>
    </block>
    <block type="page/html_header" name="header" as="header">
        <block type="page/template_links" name="top.links" as="topLinks"/>
        <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>

        <block type="core/template" name="top.nav" template="page/html/top.nav.phtml"/>
    </block>
    <block type="core/messages" name="global_messages" as="global_messages"/>
    <block type="core/messages" name="messages" as="messages"/>
    <block type="core/text_list" name="content" as="content"/>
    <block type="core/text_list" name="right" as="right"/>
    <block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"/>
    <block type="core/text_list" name="before_body_end" as="before_body_end"/>
</block>

<block type="core/profiler" output="toHtml"/>
<reference name="top.links">
    <action method="addLink" translate="label title" module="customer">
        <label>My Account</label>
        <url helper="customer/getAccountUrl"/>
        <title>My Account</title>
        <prepare/>
        <urlParams/>
        <position>10</position>

    </action>
</reference>
<reference name="root">
    <action method="setTemplate">
        <template>page/2columns-left.phtml</template>
    </action>
</reference>
<reference name="top.menu">
    <block type="catalog/navigation" name="catalog.topnav" template="catalog/navigation/top.phtml"/>
</reference>
<reference name="footer_links">

    <action method="addLink" translate="label title" module="catalog" ifconfig="catalog/seo/site_map">
        <label>Site Map</label>
        <url helper="catalog/map/getCategoryUrl"/>
        <title>Site Map</title>
    </action>
</reference>
<reference name="footer_links">
    <action method="addLink" translate="label title" module="catalogsearch" ifconfig="catalog/seo/search_terms">
        <label>Search Terms</label>

        <url helper="catalogsearch/getSearchTermUrl"/>
        <title>Search Terms</title>
    </action>
    <action method="addLink" translate="label title" module="catalogsearch">
        <label>Advanced Search</label>
        <url helper="catalogsearch/getAdvancedSearchUrl"/>
        <title>Advanced Search</title>

    </action>
</reference>
<reference name="top.links">
    <block type="checkout/links" name="checkout_cart_link">
        <action method="addCartLink"/>
        <action method="addCheckoutLink"/>
    </block>
</reference>
<reference name="footer">
    <block type="cms/block" name="cms_footer_links" before="footer_links">
        <action method="setBlockId">

            <block_id>footer_links</block_id>
        </action>
    </block>
</reference>
<reference name="left">
    <block type="tag/popular" name="tags_popular" template="tag/popular.phtm" ignore="1">
        <action method="setTemplate">
            <template>tag/popular.phtml</template>
        </action>

    </block>
</reference>
<reference name="left">

</reference>
<reference name="before_body_end">
    <block type="googleanalytics/ga" name="google_analytics" as="google_analytics"/>
</reference>
<reference name="footer_links">
    <action method="addLink" translate="label title" module="contacts" ifconfig="contacts/contacts/enabled">
        <label>Contact Us</label>

        <url>contact-us</url>
        <title>Contact Us</title>
        <prepare>true</prepare>
    </action>
</reference>
<reference name="footer_links">
    <action method="addLink" translate="label title" module="rss" ifconfig="rss/config/active">
        <label>RSS</label>

        <url>rss</url>
        <title>RSS testing</title>
        <prepare>true</prepare>
        <urlParams/>
        <position/>
        <li/>
        <a>class="link-feed"</a>

    </action>
</reference>
<reference name="wishlist_sidebar">
    <action method="addPriceBlockType">
        <type>bundle</type>
        <block>bundle/catalog_product_price</block>
        <template>bundle/catalog/product/price.phtml</template>
    </action>

</reference>
<reference name="cart_sidebar">
    <action method="addItemRender">
        <type>bundle</type>
        <block>bundle/checkout_cart_item_renderer</block>
        <template>checkout/cart/sidebar/default.phtml</template>
    </action>
</reference>
<reference name="root">

    <action method="setTemplate">
        <template>page/2columns-left.phtml</template>
    </action>
</reference>
<reference name="left">
    <action method="unsetChild">
        <name>catalog.navigation.all</name>
    </action>
    <action method="unsetChild">

        <name>callout.sendcard</name>
    </action>
    <action method="unsetChild">
        <name>callout.specialorder</name>
    </action>
    <block type="customer/account_navigation" name="customer_account_navigation" before="-" template="customer/account/navigation.phtml">
        <action method="addLink" translate="label" module="customer">
            <name>account</name>

            <path>customer/account/</path>
            <label>Account Dashboard</label>
        </action>
        <action method="addLink" translate="label" module="customer">
            <name>account_edit</name>
            <path>customer/account/edit/</path>
            <label>Account Information</label>

        </action>
        <action method="addLink" translate="label" module="customer">
            <name>address_book</name>
            <path>customer/address/</path>
            <label>Address Book</label>
        </action>
    </block>

    <block type="sales/reorder_sidebar" name="sale.reorder.sidebar" as="reorder" template="sales/reorder/sidebar.phtml"/>
    <remove name="tags_popular"/>
</reference>
<reference name="customer_account_navigation">
    <action method="addLink" translate="label" module="sales">
        <name>orders</name>
        <path>sales/order/history/</path>
        <label>My Orders</label>

    </action>
</reference>
<reference name="customer_account_navigation">
    <action method="addLink" translate="label" module="tag">
        <name>tags</name>
        <path>tag/customer/</path>
        <label>My Tags</label>
    </action>

</reference>
<reference name="customer_account_navigation">
    <action method="addLink" translate="label" module="newsletter">
        <name>newsletter</name>
        <path>newsletter/manage/</path>
        <label>Newsletter Subscriptions</label>
    </action>
</reference>
<reference name="cart_sidebar">

    <action method="addItemRender">
        <type>bundle</type>
        <block>bundle/checkout_cart_item_renderer</block>
        <template>checkout/cart/sidebar/default.phtml</template>
    </action>
</reference>
<update handle="customer_account"/>
<reference name="content">
    <block type="customer/account_dashboard" name="customer_account_dashboard" template="customer/account/dashboard.phtml">

        <block type="customer/account_dashboard_hello" name="customer_account_dashboard_hello" as="hello" template="customer/account/dashboard/hello.phtml"/>
        <block type="core/template" name="customer_account_dashboard_top" as="top"/>
        <block type="customer/account_dashboard_info" name="customer_account_dashboard_info" as="info" template="customer/account/dashboard/info.phtml"/>
        <block type="customer/account_dashboard_newsletter" name="customer_account_dashboard_newsletter" as="newsletter" template="customer/account/dashboard/newsletter.phtml"/>
        <block type="customer/account_dashboard_address" name="customer_account_dashboard_address" as="address" template="customer/account/dashboard/address.phtml"/>
        <block type="core/template" name="customer_account_dashboard_info1" as="info1"/>
        <block type="core/template" name="customer_account_dashboard_info2" as="info2"/>
    </block>
</reference>

<reference name="right">
    <action method="unsetChild">
        <name>catalog_compare_sidebar</name>
    </action>
</reference>
<reference name="customer_account_dashboard">
    <action method="unsetChild">
        <name>top</name>
    </action>

    <block type="sales/order_recent" name="customer_account_dashboard_top" as="top" template="sales/order/recent.phtml"/>
</reference>
<reference name="right">
    <action method="unsetChild">
        <name>right.poll</name>
    </action>
</reference>
<reference name="customer_account_dashboard">
    <action method="unsetChild">
        <name>customer_account_dashboard_info2</name>

    </action>
    <block type="tag/customer_recent" name="customer_account_dashboard_info2" as="info2" template="tag/customer/recent.phtml"/>
</reference>
<reference name="right">
    <action method="unsetChild">
        <name>right.newsletter</name>
    </action>
</reference>
<reference name="top.links">
    <action method="addLink" translate="label title" module="customer">

        <label>Log Out</label>
        <url helper="customer/getLogoutUrl"/>
        <title>Log Out</title>
        <prepare/>
        <urlParams/>
        <position>100</position>
    </action>

</reference></layout>

推荐答案

第一件事.确保您已经清除了Magento应用程序缓存. Magento缓存了所有布局XML,因此,在其中放置新文件不足以触发任何更改.

First things first. Make sure you've cleared out your Magento application cache. All layout XML is cached by Magento, so dropping a new file in there isn't enough to trigger any changes.

听起来您的左手列未渲染.这是一些可能的原因

It sounds like your left hand column isn't rendering. Here's a few possible reasons for this

  1. 您的根模板被设置为左两列布局以外的其他内容

  1. Your root template to is being set to something other than the two column left layout

A<删除/>标签被注入到布局中,该布局在您的左列上空了

A <remove /> tag is being injected into the layout somewhere that's zapping your left column

您的左"块被覆盖,因此它没有正确渲染所需的子块

Your "left" block is being overridden so that it doesn't have the child blocks it needs to properly render

因此,第1步要弄清楚这是哪三个.在您的所有php/phtml文件中放置一些任意但引人注目的文本(我倾向于使用类似< h1>一个</h1>,< h1>两个</h1>等),这样您就可以知道哪些文件是实际上正在加载.

So, step 1 is to figure out which of the three this is. Place some arbitrary but noticeable text in all your php/phtml files (i tend towards something like <h1>one</h1>, <h1>two</h1>, etc.) so you can tell which files are actually being loaded.

System->Configuration->Developer->Debug->Template Path Hints

执行类似的操作.如果要使用此功能,则需要向下钻取到特定的配置范围(您不能将其设置为默认值)

which does something similar. If you want to use this you'll need to drill down to a specific configuration scope (you can't set it on default)

尽管执行上述任何一项操作都不会指出直接的问题,但它们(希望)可以让您排除个别原因.

While doing either of these won't point to the direct problem, they will (hopefully) let you rule out individual causes.

关于布局,有一件重要的事情要牢记.这些XML文件的名称是任意的.布局工作全部的方式是将布局XML组合到一个巨大的XML文件中.然后,对于每个请求,将根据页面请求具有的句柄"来缩减此大型XML文件.句柄类似于< default>或< checkout_cart_index>.换句话说,任何其他布局文件中的某些内容都可能导致您在结帐页面上出现问题,而只是customer.xml中的内容.

There's an important thing to keep in mind about layouts. The names of those XML files are arbitrary. They way layouts work is all the layout XML is combined into one giant XML file. Then, for each request, this large XML file is reduced depending on what "handles" a page request has. A handle is something like <default> or <checkout_cart_index>. In other words, something in any of your other layout files may be causing you problems on the checkout page, not just things in customer.xml.

您正在使用的Magento网站也可能有一个或两个被覆盖的控制器,这将更改Magento在任何页面请求中查找的布局句柄.

It's also possible that the Magento site you're working with has a controller or two that's overridden, which would change the layout handles that Magento looks for with any page request.

要点是,可能有很多原因导致了这一点,我们需要窥探Magento的内部.在您的开发环境中安装此模块(这是我正在从事的实验性调试工作)

Point being, there's a number of things that could be causing this, and we need to peek inside Magento's internals. Install this module in your development environment (it's an experimental debugging thing I'm working on)

启动并运行后,使用以下查询字符串在商店中加载页面

When you have it up and running, load a page in your store with the following query string

http://magento.example.com/customer/account/?showLayout=handles

这将显示magento在任何请求上使用的句柄.您应该会看到类似

This will display the handles magento uses on any request. You should see a list of something like

  1. 默认
  2. STORE_bare_us
  3. THEME_ \ frontend_default_default
  4. customer_account_index
  5. customer_logged_in

如果数字4有所不同(companyname_modulename_customer_account_index),则意味着您的站点具有针对此请求的自定义控制器.如果是这种情况,则需要在< companyname_modulename_customer_account_index>可能会压倒您想要做的事情.

If number 4 is something different (companyname_modulename_customer_account_index), that means your site has a custom controller for this request. If that's the case, you'll want to look for tags in your layouts inside <companyname_modulename_customer_account_index> that may be overriding what you want to do.

接下来,使用以下查询字符串加载Magento URL

Next, load a Magento URL with the following query string

http://magento.example.com/customer/account/?showLayout=page

您应该看到浏览器中正在渲染一个XML文件.这是您请求的最终布局XML.查找具有输出属性集的标签(最有可能命名为根)

You should see an XML file being rendered in the browser. This is you request's final layout XML. Look for a tag (most likely named root) with an output attribute set

<block type="page/html" name="root" output="toHtml" template="page/2columns-left.phtml">

output属性表示这是Magento将开始渲染的模板.如果这不是您的两栏布局,那么您就更接近解决问题了.

The output attribute means this is the template that Magento will start rendering with. If this isn't your two column layout, you're closer to solving your problem.

下一步,在根模块中查找一个名称为左的模块

Next, look for a module named left inside the root module

<block type="core/text_list" name="left" as="left" ignore="1"/>

如果它具有ignore属性,则可能会有一个相应的标记

If this has an ignore attribute, there will probably be a corresponding tag

<remove name="left"/>

布局中的某个位置.您将要删除它.

somewhere in your layout. You'll want to remove this.

此外,请确保您的根块实际上有一个名称留为子级的子块.

Also, make sure that your root block actually has a child block with the name left.

<block type="page/html" name="root" output="toHtml" ... >
    ...
    <block type="core/text_list" name="left" as "left" />
    ...
</block>

最后,这更是一个健全性检查

Finally, and this is more a sanity check

http://magento.example.com/checkout/cart/?showLayout=package

在showLayout查询字符串参数中指定包"将显示您的整个包布局.这是所有您的layout.xml文件组合在一起的文件.您可以使用它来确保magento知道要添加的XML(缓存),并确保您正在编辑正确的文件.您还可以在每个句柄部分进行示例,以查找意外的布局指令,这些指令会给您带来您不满意的结果.

Specifying "package" in the showLayout query string parameter will show you your entire package layout. This is all your layout.xml files combined into one. You can use this to make sure magento knows about the XML you're adding (cache), and to make sure you're editing the correct files. You can also example each handle section to look for unexpected layout intrusctions that are giving you the results you're not happy with.

这篇关于Magento我的帐户布局XML问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆