So entfernen Sie Kundenkonto-Dashboard-Links

39

Ich möchte die folgenden Links im linken Bereich des Kundenkontodashboards entfernen.

  • meine Anwendungen
  • Geschenk registrierung
  • Belohnungspunkte
  • Link zur Geschenkkarte

Ich arbeite in der Magento 1.7 Community Edition. Jede Hilfe wird geschätzt.

Oshan
quelle
Sie können diese kostenlose und einfache Plug-and-Play-Erweiterung auch verwenden: magentocommerce.com/magento-connect/…
Gerard de Visser
Magento, wo etwas so scheinbar Leichtes zu etwas so unnötig Schwierigem wird.
Joshua34

Antworten:

52

Schritt 1: Gehen Sie zu (yourPackage / YourTemplate / customer / account / navigation.phtml)

Schritt 2: Ersetzen Sie die folgende Zeile

<?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 */
?>

Das obige Code-Snippet enthält die Möglichkeit, alle Navigationslinks zu entfernen. Hoffe das wird allen helfen.

Referenzlink: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

Oshan
quelle
5
Wenn Sie etwas mit den Layout-XMLs reparieren können, empfehle ich die Verwendung einer solchen hartcodierten Lösung. @Marius seine Antwort ist eine ganze Menge sauberer.
Sander Mangel
1
@ Sandermangel, meinst du If you can't??
Pratik
2
Nein, er meint : „Ich würde empfehlen gegen
Fabian Schmengler
Diese Antwort verhindert nicht den Zugriff auf die zugrunde liegenden Funktionen der Systeme, die entfernt werden sollen. Der Antwort sollte ein Haftungsausschluss hinzugefügt werden. Der Besuch der richtigen Routen oder die Verwendung von Curl ermöglichen einen uneingeschränkten Zugang.
Luke A. Leber
Nein, er meint "Ich würde davon abraten "
Xenocide8998
28

Ich sehe hier 2 Möglichkeiten.

Zuerst und am einfachsten: Suchen Sie einfach die Layoutdateien, die diese Menüelemente hinzufügen, und kommentieren Sie den Code für sie.
Zum Beispiel My applicationswird app/design/frontend/{interface}/{theme}/layout/oauth.xmldurch dieses Stück XML hinzugefügt

<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>

Die zweite Methode, bei der ich nicht 100% sicher bin, dass sie funktioniert, besteht darin, diese XML- local.xmlDatei in die Layoutdatei Ihres Themas einzufügen :

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

Sie müssen <action>für jeden Link, den Sie entfernen möchten, ein Tag hinzufügen .

Es gibt auch die dritte Option: Wenn Sie die Module überhaupt nicht verwenden, deaktivieren Sie sie einfach. Dies kann auch die Leistung steigern.
Dazu erstelle diese Datei: app/etc/modules/Zzzz.xmlmit diesem Inhalt:

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

Möglicherweise treten hier einige Probleme auf. Einige andere Module, die Sie verwenden möchten, hängen von den Modulen ab, die Sie deaktivieren möchten.

Marius
quelle
Danke @Marius für die Antwort. Nun, ich habe die zweite Option (removeLinkByUrl) ausprobiert, die Sie vorgeschlagen haben, bevor Sie die Frage gestellt haben. Aber anscheinend hat es bei mir nicht funktioniert.
Oshan
4
Die zweite Option kann nicht funktionieren, da Mage_Customer_Block_Account_Navigationnicht von geerbt wird Mage_Page_Block_Template_Links.
mpw
26

Es gibt eine FOSS-Erweiterung, die Remote-Kontoverbindungen die Back-End-Option hinzufügt.

Es gibt ein zweites Modul (auch FOSS), das die removeLinkMethode hinzufügt , so dass Sie Folgendes in Ihrem verwenden könnenlocal.xml

Haftungsausschluss: Ich bin Entwickler der zweiten Erweiterung.

<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>
Alex
quelle
Nachdem ich mit verschiedenen Techniken von local.xml-Overrides bis hin zu PHP herumgespielt habe, sind diese Open-Source-Lösungen meine Favoriten.
Michael Thompson
5

Die einfachste Lösung (Implementierung und Verwendung) ich gefunden habe , ist zu ersetzen , Mage_Customer_Block_Account_Navigationin app/code/localund eine Add - removeLinkByNameMethode, die das gleiche tut wie das, was Oshan Antwort tut, aber ist verwendbar von Layout - Dateien. Ein traditionelleres Umschreiben von Klassen würde ebenfalls funktionieren, könnte jedoch möglicherweise Konflikte mit einem Plugin verursachen.

Warnung! Ungetestet!

Eine kompliziertere Lösung wäre, ein eigenes Modul zu schreiben, das eine Methode Blockerweitert Mage_Customer_Block_Account_Navigationund einschließt removeLinkByName. Damit dies funktioniert, müssten Sie den customer_account_navigationBlock entfernen / entfernen und durch den für Ihr neues Modul ersetzen. Von da an erhalten Sie zu jedem Zeitpunkt, customer_account_navigationauf den im Layout verwiesen wird, eine Instanz mit removeLinkByName.

mpw
quelle
Ich habe die zweite Option gewählt, es ist ziemlich viel Arbeit, aber es funktioniert. Ich habe ungefähr zwei Stunden gebraucht und arbeite als Vollzeit-Magento-Berater und PHP / Linux-Entwickler. Wenn jemand Details braucht, schreib mir eine PM.
Siliconrockstar
Die einfachste Lösung besteht darin, eine Core-Klasse zu überschreiben, wenn es genügend bessere Lösungen gibt.
Ria Weyprecht
5

Eine schnelle Lösung, um alle Elemente der Liste "Mein Konto" unter "Meine Bestellungen" zu entfernen, einschließlich Abrechnungsvereinbarungen, wiederkehrender Profile, "Meine Anwendungen" und "Meine herunterladbaren Produkte". Entfernt auch meine Wunschliste und meine Newsletter-Links, die auf Magento 1.9 getestet wurden:

Kommentieren Sie die Zeilen 31 - 66 aus app / design / frontend / default / YOURTHEME / layout / wishlist.xml aus (falls nicht, kopieren Sie sie aus 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-->

Kommentieren Sie die Zeilen 47 - 65 aus app / design / frontend / default / YOURTHEME / layout / newsletter.xml aus (falls nicht, kopieren Sie sie aus app / design / frontend / rwd / default / layout / newsletter.xml).

Newsletter </ name> newsletter / manage / </ path> Newsletter-Abonnements </ label> </ action> </ 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 (an Ihre Anforderungen anpassen)

.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;
}
Joshua34
quelle
5

Um das Entfernen der Links zu vermeiden, würde ich empfehlen, ID-Werte basierend auf der Variablen $ _index zuzuweisen, damit Sie die Links über CSS ausblenden können.

Folgendes habe ich getan:

Aus 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; ?>

Dann kannst du natürlich gehen

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

Es gibt keine Möglichkeit, eine Katze zu häuten, aber dies ist eine schnelle und einfache Option, ohne die Funktionalität wirklich zu beeinträchtigen.

Thomas Harding
quelle
1
Sollte ausdrücklich beachten, dass dies Benutzer nicht davon abhält, auf die Funktionen hinter den fraglichen Funktionen zuzugreifen. Voller Zugriff ist entweder eine CSS-Bearbeitung oder eine schnelle Bearbeitung der Adressleiste. Verlassen Sie sich also nicht darauf, dass andere Benutzer die Funktionen nicht nutzen.
Luke A. Leber
Das ist fair genug und ich verstehe vollkommen, woher du kommst. Ich wollte diese Funktionalität nicht unbedingt entfernen, aber ich wollte sie verbergen, weil der Kunde speziell der Meinung war, dass dies seine Kunden verwirren könnte. Ich denke, jeder für sich!
Thomas Harding
5

Ich dachte, eine bessere Lösung wäre, den Block neu zu schreiben. Dies wurde oben erwähnt, aber es gab kein Beispiel:

Fügen Sie den Rewrite zu Ihrer config.xml im globalen Abschnitt hinzu:

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

Überschreibe addLink in Mage_Customer_Block_Account_Navigation:

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);
        }
    }
}

Das exclude_links-Array kann aus einer Konfigurationseinstellung abgerufen werden, wenn Sie die ausgeschlossenen Links nicht hart codieren möchten .

N Lewis
quelle
3

Das habe ich gegoogelt: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Wir können fast alle Layoutaspekte des Standard-Magento-Layouts ändern, es gibt jedoch Situationen, in denen dieser Ansatz fehlschlägt. Dies äußert sich insbesondere in dem Moment, in dem Sie den Block top.links ändern möchten. Elemente in diesem Block werden mit der Aktionsmethode addLink hinzugefügt. Wenn Sie sich also fragen, wie Sie einige Links aus dem Standardsatz entfernen können, lautet die Antwort: Sie können nicht! Leider implementiert die Blockklasse page / template_links keine 'removeLink'-Aktionsmethode. Daher besteht das Resort darin, den gesamten Block mit dem unsetChild-Ansatz zu entfernen und den Links-Block mit unseren eigenen Links in local.xml wieder hinzuzufügen.

Melaxon
quelle
2

Ich möchte Sie zunächst bitten, darauf hinzuweisen, dass es verschiedene Möglichkeiten gibt, Ihre Probleme zu lösen.

  1. Es ist der einfachste Weg, den Code in der layout.xmlDatei in base zu finden, für den Sie den Code entfernen möchten, z. B .: Wenn ich die "Meine Tags" entfernen möchte, kommentieren Sie einfach den Teil.

    <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>

    Sie wissen jedoch, dass wir die Basisdatei nicht ändern sollten. Eine weitere einfache Methode, die durchgeführt werden könnte, ist

  2. Deaktivieren des Links in Ihrer Vorlagendatei. Zum Kopieren Ihrer navigation.phtmlDatei in Ihr Design (Hinweis: Die Ordnerstruktur sollte identisch sein) aus der base\default\template\customer\account\navigation.phtml. was in der obigen Antwort gezeigt wird.

  3. Eine weitere mühsame Aufgabe besteht darin, Ihr Kernmodul neu zu schreiben und eine Methode "RemoveLinkByName" zu erstellen.

aton1004
quelle
2

Eine vollständige Lösung zum Entfernen der Kontodashboardfunktionen umfasst sowohl eine clientseitige als auch eine serverseitige Änderung. Wenn nur die Client-Seite entfernt und / oder ausgeblendet wird, hindert nichts technisch versierte Benutzer daran, weiterhin auf die Funktionen zuzugreifen, indem sie die Routen in ihrem Browser manuell erstellen oder einen komplexeren CURL- "Angriff" ausführen (der den richtigen umfassen kann) CSRF-Token und durchrutschen).

Die Client-Seite wird leicht durch XML-Aktualisierungen erreicht, wie aus der Vielzahl der bereits gegebenen Antworten hervorgeht.

Die Serverseite ist etwas komplexer und erfordert ein Verständnis der Funktionalität, die entfernt wird.

Persönlich würde ich den Weg gehen, Beobachter zu verwenden, um verbotene HTTP-Statuscodes auf jeder der Routen des zu entfernenden Features bedingt zurückzugeben. Um herauszufinden, welche Routen zu beobachten sind, öffnen Sie die zugehörige Controller-Datei und suchen Sie alle Front-End-Aktionen, die nicht mehr verfügbar sein sollten. Als Nächstes erstellen Sie ein Modul, das Systemkonfigurationsfelder zum Deaktivieren dieser Funktion definiert. Aktualisieren Sie mithilfe dieser Systemkonfigurationsfelder das Frontend-Layout-XML unter bestimmten Bedingungen und geben Sie die richtigen HTTP-Antwortcodes für jede beobachtete Route unter bestimmten Bedingungen zurück.

Codebeispiele für jeden der oben genannten Schritte finden Sie in Ihrer bevorzugten Suchmaschine.

Luke A. Leber
quelle
1

Fügen Sie diesen Code zu einer local.xml-Datei hinzu

<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>

Getestet in Magento 1.7.0.2

lavb
quelle
In Magento 1.8.1.0 führt dies zu Warnung: Fehlendes Argument 2 für Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony