3

local.xml ファイル (レイアウトに対するすべての更新を行う場所) を使用して、別のブロックにネストされているブロックを削除しようとしています。<remove> タグまたは unsetChild メソッドを使用してブロックを簡単に削除できますが、別のブロックにネストされているブロックを削除できないようです。

削除しようとしているコード行は次のとおりです (customer.xml ファイルにあります)。具体的には、「customer_account_dashboard_newsletter」というブロックです

<customer_account_index translate="label">
        <label>Customer My Account Dashboard</label>
        <update handle="customer_account"/>
        <!-- Mage_Customer -->
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
        </reference>
        <reference name="my.account.wrapper">
            <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>

    </customer_account_index>

これは今のところうまくいかないことに気づきましたが、これが私の出発点です (私の local.xml ファイルにあります):

<customer_account_index>
    <reference name="my.account.wrapper">
            <action method="unsetChild"><name>customer_account_dashboard_newsletter</name></action>
    </reference>
</customer_account_index>

何かご意見は?ありがとうございました。

4

4 に答える 4

1

間違ったブロックを参照していると思います。削除するブロックの親ブロックを参照する必要があります。親の親ブロックを参照しています。

<customer_account_index>
  <reference name="customer_account_dashboard">
    <action method="unsetChild"><name>customer_account_dashboard_newsletter</name></action>
  </reference>
</customer_account_index>
于 2010-07-14T14:21:01.220 に答える
1

別のブロック内のブロックを設定解除するには、参照をネストする必要があります。例えば:

<catalog_product_view>
    <reference name="content">
        <reference name="product.info">
            <action method="unsetChild"><name>addtocart</name></action>
        </reference>
    </reference>
</catalog_product_view>

また、システムがブロック名を認識しない場合があるため、アクションでエイリアスを使用する必要があります。

于 2012-05-18T10:25:14.550 に答える
0

一般に、ネストされたブロックを削除する場合は、参照もネストする必要がありlocal.xmlます。この場合、正しい構文は次のようになります。

<customer_account_index>
    <reference name="my.account.wrapper">
        <reference name="customer_account_dashboard">
            <remove name="customer_account_dashboard_newsletter" />
        </reference>
    </reference>
</customer_account_index>

しかし、次の行に気付きましたcustomer.xml

<block type="customer/account_dashboard_newsletter" name="customer_account_dashboard_newsletter" as="newsletter" template="customer/account/dashboard/newsletter.phtml"/>

削除したいブロックを表示する効果はありません。ただし、代わりにブロックがcustomer/account/dashboard/info.phtmlテンプレート内に追加されます。これは、前の行に含まれています customer.xml

<block type="customer/account_dashboard_info" name="customer_account_dashboard_info" as="info" template="customer/account/dashboard/info.phtml"/>

テーマにコピーcustomer/account/dashboard/info.phtmlすると、ダッシュボードにニュースレター ブロックを表示するコードを削除できます。

<?php if( $this->isNewsletterEnabled() ): ?>
于 2014-03-01T11:35:15.227 に答える