通过布局向其他页面添加块

Adding a block through layout to other pages

我们创建的扩展中的块没有出现任何内容。

我们要添加的内容是一个横幅扩展,可以在管理员中打开和关闭。然后,我们将横幅块代码添加到 xml 文件中需要的任何位置。

app/code/local/Company/SocialRating/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Company_SocialRating>
            <version>1.0.0</version>
        </Company_SocialRating>
    </modules>
    <frontend>
        <routers>
            <rating>
                <use>standard</use>
                <args>
                    <module>Company_SocialRating</module>
                    <frontName>social-rating</frontName>
                </args>
            </rating>
        </routers>
        <layout>
            <updates>
                <socialRating>
                    <file>social-rating.xml</file>
                </socialRating>
            </updates>
        </layout>
    </frontend>
    <global>
        <blocks>
            <socialRating>
                <class>Company_SocialRating_Block_Banner</class>
            </socialRating>
        </blocks>
    </global>
</config>

app/code/local/Company/SocialRating/Block/Banner.php

class Company_SocialRating_Block_Banner extends Mage_Core_Block_Template
{
}

app/design/frontend/superb/desktop/layout/social-rating.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="head">
            <action method="addJs"><script>superb/ratings-and-review.js</script></action>
        </reference>
    </default>
</layout>

app/design/frontend/superb/desktop/template/social-rating/banner.phtml

<h1>test content</h1>

然后我们认为我们将它添加到结帐成功页面,如下所示

app/design/frontend/superb/desktop/layout/checkout.xml

<layout version="0.1.0">
    <checkout_onepage_success translate="label">
        <label>One Page Checkout Success</label>
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
        </reference>
        <reference name="content">
            <block type="socialRating/banner" name="social.rating.banner" template="social-rating/banner.phtml" />
            <block type="checkout/onepage_success" name="checkout.success" template="checkout/success.phtml"/>
        </reference>
    </checkout_onepage_success>
</layout>

添加到结帐成功页面后没有出现。 缓存已被刷新。

你的文件没问题,除了布局。它不会在任何地方显示,因为 "checkout.xml" 未在任何地方声明。 您可以将代码放在 "social-rating.xml".

中,而不是声明另一个 .xml 布局文件

将此代码放入 <layout></layout> 标签中:

    <checkout_onepage_success translate="label">
    <label>One Page Checkout Success</label>
    <reference name="root">
        <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
    </reference>
    <reference name="content">
        <block type="socialRating/banner" name="social.rating.banner" template="social-rating/banner.phtml" />
        <block type="checkout/onepage_success" name="checkout.success" template="checkout/success.phtml"/>
    </reference>
    </checkout_onepage_success>

<checkout_onepage_success> 你可以删除 <block type="checkout/onepage_success" name="checkout.success" template="checkout/success.phtml"/> 因为它已经在另一个 magento 的布局文件中声明,如果你不这样做你会看到它显示两次。

对于你的主要问题,块没有加载,你的 config.xml 有一个错误当你声明你的块时你不必告诉 magento 这个块有什么名字:

    <global>
      <blocks>
         <socialrating>
            <class>Company_Socialrating_Block</class>
         </socialrating>
      </blocks>
    </global>

如果问题出在您的块上,或者您认为是这样,您可以将布局中的 替换为 core/template 块,这样您就可以确定为此目的正确声明了该块。

最后,为你的模块使用一个简单的命名法,因为 SocialRating 会引起一些冲突,只需将其重命名为 Socialrating 就可以了(这是我个人的建议,不要那么混乱)。