カスタマーアカウントダッシュボードリンクを削除する方法


39

カスタマーアカウントダッシュボードの左側のパネルから次のリンクを削除しますか?

  • 私のアプリケーション
  • ギフト登録
  • 報酬ポイント
  • ギフトカードリンク

私はMagento 1.7 Community Editionで作業しています。任意の助けをいただければ幸いです。


この無料で簡単な「プラグアンドプレイ」拡張機能を使用することもできます。magentocommerce.com
Gerard de Visser

一見簡単そうに見えるものが、不必要に難しいものに変わるMagento。
ジョシュア34

回答:


52

ステップ1:(yourPackage / YourTemplate / customer / account / navigation.phtml)に移動します

ステップ2:以下の行を置き換えます

<?php $count = count($links); ?>
        **With**
<?php $_count = count($_links); /* Add or Remove Account Left Navigation Links Here -*/
      unset($_links['account']); /* Account Info */     
      unset($_links['account_edit']); /* Account Info */            
      unset($_links['tags']); /* My Tags */
      unset($_links['invitations']); /* My Invitations */
      unset($_links['reviews']);  /* Reviews */
      unset($_links['wishlist']); /* Wishlist */
      unset($_links['newsletter']); /* Newsletter */
      unset($_links['orders']); /* My Orders */
      unset($_links['address_book']); /* Address */
      unset($_links['enterprise_customerbalance']); /* Store Credit */
      unset($_links['OAuth Customer Tokens']); /* My Applications */
      unset($_links['enterprise_reward']); /* Reward Points */
      unset($_links['giftregistry']); /* Gift Registry */
      unset($_links['downloadable_products']); /* My Downloadable Products */
      unset($_links['recurring_profiles']); /* Recurring Profiles */
      unset($_links['billing_agreements']); /* Billing Agreements */
      unset($_links['enterprise_giftcardaccount']); /* Gift Card Link */
?>

上記のコードスニペットには、すべてのナビゲーションリンクを削除する方法が含まれています。これがすべてに役立つことを願っています。

参照リンク:https : //github.com/Aproducktion/Magento-Remove-Dashboard-Links


5
レイアウトXMLを使用して何かを修正できる場合は、このようなハードコーディングされたソリューションを使用することをお勧めします。@マリウス彼の答えはかなりきれいです。
サンダーマンジェル

1
@SanderMangel、どういう意味If you can'tですか??
Pratik

2
いいえ、彼は意味「私がアドバイスでしょう反対
ファビアンSchmengler

この回答は、削除しようとするシステムの基礎となる機能へのアクセスを妨げません-免責事項を回答に追加する必要があります。正しいルートにアクセスするか、curlを利用すると、自由にアクセスできます。
ルークA.レーバー

いいえ、彼は意味「私は考えに対して助言
Xenocide8998

28

ここには2つのオプションがあります。

最初の最も簡単な方法:これらのメニュー項目を追加するレイアウトファイルを見つけて、それらのコードにコメントを付けるだけです。
たとえば、XMLのこの部分を通してMy applications追加されapp/design/frontend/{interface}/{theme}/layout/oauth.xmlます

<customer_account>
    <reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="oauth">
            <name>OAuth Customer Tokens</name>
            <path>oauth/customer_token</path>
            <label>My Applications</label>
        </action>
    </reference>
</customer_account>

2番目の方法は、動作することを100%確信していませんが、このxmlをlocal.xmlテーマのレイアウトファイル内に追加することです。

<customer_account>
    <reference name="customer_account_navigation">
        <action method="removeLinkByUrl"><url>oauth/customer_token</url></action>
    </reference>
</customer_account>

<action>削除するリンクごとに1つのタグを追加する必要があります。

3番目のオプションもあります。モジュールをまったく使用していない場合は、単に無効にします。これにより、パフォーマンスも向上します。
このために、このファイルを作成します:app/etc/modules/Zzzz.xmlこのコンテンツで:

<config>
    <modules>
        <Mage_Oauth>
             <active>false</active>
        </Mage_Oauth>
    </modules>
</config>

ここでいくつかの問題が発生する可能性があります。使用する他のモジュールは、無効にするモジュールによって異なります。


答えてくれた@Mariusに感謝します。さて、質問を出す前にあなたが提案した2番目のオプション(removeLinkByUrl)を試しました。しかし、私にとってはうまくいかなかったようです。
オーシャン

4
Mage_Customer_Block_Account_Navigationから継承しないため、2番目のオプションは機能しませんMage_Page_Block_Template_Links
mpw 14

26

リモートアカウントリンクにバックエンドオプションを追加するFOSS拡張機能があります。

メソッドを追加する2番目のモジュール(これもFOSS)があり、次のモジュールremoveLinkを使用できます。local.xml

免責事項:私は2番目の拡張機能の開発者です。

<customer_account>
        <reference name="customer_account_navigation">
            <action method="removeLink"><name>OAuth Customer Tokens</name></action>
            <action method="removeLink"><name>billing_agreements</name></action>
            <action method="removeLink"><name>recurring_profiles</name></action>
        </reference>
 </customer_account>

local.xmlオーバーライドからPHPへのいくつかのテクニックをいじり回したことは、これらのオープンソースソリューションが私のお気に入りです。
マイケルトンプソン

5

私が見つけた最も単純な解決策(実装と使用法)は、メソッドを置き換えMage_Customer_Block_Account_Navigationapp/code/local追加するremoveLinkByNameことです。これは、Oshanの答えと同じですが、レイアウトファイルから使用できます。より伝統的なクラスの書き換えも機能しますが、プラグインとの競合を引き起こす可能性があります。

警告!未テスト!

より複雑な解決策は、メソッドBlockを拡張Mage_Customer_Block_Account_Navigationして含む独自のモジュールを記述するremoveLinkByNameことです。これが機能するためには、customer_account_navigationブロックを削除/設定解除して、新しいモジュールのブロックに置き換える必要があります。それ以降、customer_account_navigationレイアウトでいつでも参照され、でインスタンスを取得しますremoveLinkByName


2番目のオプションを選択しました。かなりの作業量ですが、動作します。約2時間かかり、フルタイムのMagentoコンサルタントおよびPHP / Linux開発者として働いています。誰かが詳細を必要とするなら、私にPM。
Siliconrockstar

より簡単なソリューションがたくさんある場合、最も簡単なソリューションはCoreクラスをオーバーライドすることですか?
リアウェイプレヒト

5

簡単な解決策。請求契約、繰り返しプロファイル、マイアプリケーション、ダウンロード可能な製品など、マイオーダーの下にあるすべてのマイアカウントリストアイテムを削除します。サイト全体で、Magento 1.9でテストされたマイウィッシュリストとニュースレターリンクも削除します。

app / design / frontend / default / YOURTHEME / layout / wishlist.xmlの31行目から66行目をコメントアウトします(存在しない場合はapp / design / frontend / rwd / default / layout / wishlist.xmlからコピーします)

<!--default>
    <reference name="top.links">
        <block type="wishlist/links" name="wishlist_link" />
        <action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
    </reference>

    <!-- Mage_Wishlist -->
    <!--reference name="right">
        <block type="wishlist/customer_sidebar" name="wishlist_sidebar" as="wishlist" after="cart_sidebar" template="wishlist/sidebar.phtml" />
    </reference>
</default-->
<!--customer_account>
    <!-- Mage_Wishlist -->
    <!--reference name="customer_account_navigation">
        <action method="addLink" translate="label" module="wishlist" ifconfig="wishlist/general/active"><name>wishlist</name><path>wishlist/</path><label>My Wishlist</label></action>
    </reference-->
<!--/customer_account-->
<!--customer_account_index>
    <reference name="right">
        <action method="unsetChild"><name>wishlist</name></action>
    </reference>
</customer_account_index-->

app / design / frontend / default / YOURTHEME / layout / newsletter.xmlの47行目から65行目をコメントアウトします(存在しない場合はapp / design / frontend / rwd / default / layout / newsletter.xmlからコピーします)

ニュースレター</ name> newsletter / manage / </ path>ニュースレター購読</ label> </ action> </ reference> </ reference> </ customer_account->

<!--newsletter_manage_index translate="label">
    <label>Customer My Account Newsletter Subscriptions</label>
    <update handle="customer_account"/>
    <reference name="my.account.wrapper">
        <block type="customer/newsletter" name="customer_newsletter">
            <block type="page/html_wrapper" name="customer.newsletter.form.before" as="form_before" translate="label">
                <label>Newsletter Subscription Form Before</label>
            </block>
        </block>
    </reference>
</newsletter_manage_index!-->

CSS(要件ごとに調整)

.block-account .block-content ul li:nth-last-child(1),  .block-account .block-content ul li:nth-last-child(2),  .block-account .block-content ul li:nth-last-child(3),  .block-account .block-content ul li:nth-last-child(4) {
display: none;
}

.cart-table .cart-links > li:last-child {
display:none;
}

5

リンクが削除されないようにするには、$ _ index変数に基づいてID値を割り当てることをお勧めします。これにより、CSSを介してリンクを非表示にできます。

私がやったことは次のとおりです。

yourPackage / YourTemplate / customer / account / navigation.phtmlから

        <?php foreach ($_links as $_link): ?>
            <?php $_last = ($_index++ >= $_count); ?>
            <?php if ($this->isActive($_link)): ?>
                <li class="current<?php echo ($_last ? ' last' : '') ?>" id="account-link-<?php echo $_index;?>"><strong><?php echo $_link->getLabel() ?></strong></li>
            <?php else: ?>
                <li<?php echo ($_last ? ' class="last"' : '') ?> id="account-link-<?php echo $_index;?>"><a href="<?php echo $_link->getUrl() ?>"><?php echo $_link->getLabel() ?></a></li>
            <?php endif; ?>
        <?php endforeach; ?>

だから明らかに、あなたは行くことができます

        #account-link-1 {
            display:none;
        }

猫のスキンを作成する方法は1つではありませんが、これは機能を実際に損なうことなく、すばやく簡単なオプションです。


1
これにより、ユーザーが問題の機能の背後にある機能にアクセスするのを停止しないことに明示的に注意する必要があります。フルアクセスは、CSS編集またはアドレスバーの迅速な編集のいずれかです。したがって、機能を使用していない人に依存しないでください。
ルークA.レーバー

それは十分に公正であり、私はあなたがどこから来ているかを完全に理解しています。私は厳密にこの機能を削除したくありませんでしたが、クライアントがこれが顧客を混乱させるかもしれないと特に感じたので、それを隠したかったです。それぞれに私は推測する!
トーマスハーディング

5

より良い解決策はブロックを書き直すことだと思いました。これは上記で言及されましたが、例はありませんでした。

グローバルセクションのconfig.xmlに書き換えを追加します。

<blocks>
    <customer>
        <rewrite>
            <account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
        </rewrite>
    </customer>
</blocks>

Mage_Customer_Block_Account_NavigationでaddLinkをオーバーライドします。

class Your_Module_Block_Customer_Account_Navigation extends Mage_Customer_Block_Account_Navigation
{
    private $exclude_links = null;

    public function addLink($name, $path, $label, $urlParams=array())
    {
        if (!$this->exclude_links) {
            $this->exclude_links = array(
                'OAuth Customer Tokens', /* My Applications */
                'downloadable_products', /* My Downloadable Products */
                'recurring_profiles', /* Recurring Profiles */
                'billing_agreements' /* Billing Agreements */
            );
        }

        if (!in_array($name, $this->exclude_links)) {
            return parent::addLink($name, $path, $label, $urlParams);
        }
    }
}

exclude_links配列は、除外されたリンクをハードコーディングしたくない場合、設定から取得できます。


3

これは私がこれについてグーグルで調べたものです:http : //magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

標準のMagentoレイアウトのほぼすべてのレイアウトを変更できますが、このアプローチが失敗する状況がいくつかあります。特に、これはtop.linksブロックを変更したい瞬間に現れます。このブロック内のアイテムはaddLinkアクションメソッドを使用して追加されるため、デフォルトセットからいくつかのリンクを削除する方法を知りたい場合は、答えはできません。残念ながら、page / template_linksブロッククラスは 'removeLink'アクションメソッドを実装していないため、unsetChildアプローチを使用してブロック全体を削除し、locals.xmlでリンクを追加してリンクブロックを追加します。


2

最初に、問題を解決するためのさまざまな方法があることを伝えてください。

  1. layout.xml削除したいbase内のファイルでコードを見つけるのが最も簡単な方法です。たとえば、「My tags」を削除したい場合は、その部分をコメントします。

    <customer_account>
        <!-- Mage_Tag -->
        <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>
    </customer_account>

    しかし、ベースファイルを変更してはならないことを知っているので、次に実行できる次の簡単な方法は

  2. テンプレートnavigation.phtmlファイルのリンクを解除します。そのためには、ファイルをテーマからコピーします(注:フォルダー構造は同じである必要があります)base\default\template\customer\account\navigation.phtml。上記の回答に示されています。

  3. 別の退屈なタスクは、コアモジュールを書き換え、メソッド「RemoveLinkByName」を作成することです。


2

アカウントダッシュボード機能を削除する完全なソリューションには、クライアント側とサーバー側の両方の変更が含まれます。クライアント側のみが削除および/または隠​​されている場合、技術に精通したユーザーがブラウザでルートを手作業で作成したり、より洗練されたCURL「攻撃」(適切なCSRFトークンとスリップスルー)。

クライアント側は、すでに与えられた多数の回答が示すように、XMLの更新を通じて簡単に実現できます。

サーバー側はもう少し複雑で、削除される機能を理解する必要があります。

個人的には、オブザーバーを使用して、削除される機能の各ルートで禁止されたHTTPステータスコードを条件付きで返すルートに行きます。監視するルートを見つけるには、関連するコントローラーファイルを開き、使用できなくなったフロントエンドアクションをそれぞれ見つけます。次に、上記の機能をソフト無効にするためのシステム構成フィールドを定義するモジュールを作成します。これらのシステム構成フィールドを使用して、フロントエンドレイアウトXMLを条件付きで更新し、同様に、監視対象の各ルートに対して適切なHTTP応答コードを条件付きで返します。

上記の各ステップのコード例は、お気に入りの検索エンジンで見つけることができます。


1

このコードをlocal.xmlファイルに追加します

<customer_account>
    <reference name="customer_account_navigation">
           <action method="addLink"><name>tags</name></action>
           <action method="addLink"><name>recurring_profiles</name></action>
           <action method="addLink"><name>newsletter</name></action>
           <action method="addLink"><name>billing_agreements</name></action>
           <action method="addLink"><name>OAuth Customer Tokens</name></action>
           <action method="addLink"><name>downloadable_products</name></action>
   </reference>   
</customer_account>

Magento 1.7.0.2でテスト済み


Magento 1.8.1.0では、この結果、警告:Mage_Customer_Block_Account_Navigation :: addLink()の引数2がありません
アンソニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.