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.
Ich möchte die folgenden Links im linken Bereich des Kundenkontodashboards entfernen.
Ich arbeite in der Magento 1.7 Community Edition. Jede Hilfe wird geschätzt.
Antworten:
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
If you can't
??
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 applications
wird app/design/frontend/{interface}/{theme}/layout/oauth.xml
durch 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.xml
Datei 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.xml
mit 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.
Mage_Customer_Block_Account_Navigation
nicht von geerbt wird Mage_Page_Block_Template_Links
.
Es gibt eine FOSS-Erweiterung, die Remote-Kontoverbindungen die Back-End-Option hinzufügt.
Es gibt ein zweites Modul (auch FOSS), das die removeLink
Methode 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>
Die einfachste Lösung (Implementierung und Verwendung) ich gefunden habe , ist zu ersetzen , Mage_Customer_Block_Account_Navigation
in app/code/local
und eine Add - removeLinkByName
Methode, 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 Block
erweitert Mage_Customer_Block_Account_Navigation
und einschließt removeLinkByName
. Damit dies funktioniert, müssten Sie den customer_account_navigation
Block entfernen / entfernen und durch den für Ihr neues Modul ersetzen. Von da an erhalten Sie zu jedem Zeitpunkt, customer_account_navigation
auf den im Layout verwiesen wird, eine Instanz mit removeLinkByName
.
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;
}
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.
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 .
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.
Ich möchte Sie zunächst bitten, darauf hinzuweisen, dass es verschiedene Möglichkeiten gibt, Ihre Probleme zu lösen.
Es ist der einfachste Weg, den Code in der layout.xml
Datei 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
Deaktivieren des Links in Ihrer Vorlagendatei. Zum Kopieren Ihrer navigation.phtml
Datei 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.
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.
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