Chcę usunąć następujące linki w lewym panelu pulpitu nawigacyjnego konta klienta?
- moje aplikacje
- Rejestr podarunkowy
- Punkty premiowe
- Link do karty podarunkowej
Pracuję w Magento 1.7 Community Edition. Każda pomoc będzie mile widziana.
Chcę usunąć następujące linki w lewym panelu pulpitu nawigacyjnego konta klienta?
Pracuję w Magento 1.7 Community Edition. Każda pomoc będzie mile widziana.
Odpowiedzi:
Krok 1: Przejdź do (yourPackage / YourTemplate / customer / account / navigation.phtml)
Krok 2: Zamień poniższy wiersz
<?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 */ ?>
Powyższy fragment kodu zawiera sposób usunięcia wszystkich łączy nawigacyjnych. Mam nadzieję, że to pomoże wszystkim.
Link referencyjny: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links
If you can't
?
Widzę tutaj 2 opcje.
Pierwszy i najłatwiejszy: po prostu znajdź pliki układu, które dodają te elementy menu i skomentuj dla nich kod.
Na przykład My applications
jest dodawany app/design/frontend/{interface}/{theme}/layout/oauth.xml
przez ten kawałek 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>
Druga metoda, której nie jestem w 100% pewien, że zadziała to dodanie tego local.xml
pliku XML do pliku układu motywu:
<customer_account>
<reference name="customer_account_navigation">
<action method="removeLinkByUrl"><url>oauth/customer_token</url></action>
</reference>
</customer_account>
Musisz dodać jeden <action>
tag do każdego linku, który chcesz usunąć.
Istnieje również trzecia opcja, jeśli w ogóle nie używasz modułów, po prostu je wyłącz. Może to również zwiększyć wydajność.
W tym celu utwórz ten plik: app/etc/modules/Zzzz.xml
z tą zawartością:
<config>
<modules>
<Mage_Oauth>
<active>false</active>
</Mage_Oauth>
</modules>
</config>
Możesz mieć pewne problemy tutaj są inne moduły, których chcesz użyć, zależą od tych, które chcesz wyłączyć.
Mage_Customer_Block_Account_Navigation
nie dziedziczy Mage_Page_Block_Template_Links
.
Istnieje rozszerzenie FOSS, które dodaje opcję zaplecza do zdalnych łączy kont.
Istnieje drugi moduł (również FOSS), który dodaje removeLink
metodę, dzięki czemu możesz użyć następujących w swoimlocal.xml
Oświadczenie: Jestem deweloperem drugiego rozszerzenia.
<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>
Najprostszym rozwiązaniem (wdrożenie i wykorzystanie) Znalazłem ma zastąpić Mage_Customer_Block_Account_Navigation
w app/code/local
i dodać removeLinkByName
metodę, która robi to samo, co odpowiedź Oshan za nie, ale nadaje się do użytku z plików graficznych. Bardziej tradycyjne przepisywanie klas również by działało, ale potencjalnie może powodować konflikty z wtyczką.
Ostrzeżenie! Niesprawdzone!
Bardziej skomplikowanym rozwiązaniem byłoby napisanie własnego modułu, Block
który rozszerza Mage_Customer_Block_Account_Navigation
i zawiera removeLinkByName
metodę. Aby to zadziałało, musisz usunąć / rozbroić customer_account_navigation
blok i zastąpić go nowym dla modułu. Od tego momentu, za każdym razem, gdy customer_account_navigation
ma się odniesienie w układzie, otrzymasz instancję z removeLinkByName
.
Szybkie rozwiązanie, aby usunąć wszystkie elementy z listy Moje konto poniżej Moich zamówień, w tym Umowy rozliczeniowe, Profile cykliczne, Moje aplikacje i Moje produkty do pobrania. Usunie również linki do mojej listy życzeń i mojego biuletynu w całej witrynie, testowane na Magento 1.9:
Skomentuj wiersze 31 - 66 z app / design / frontend / default / YOURTHEME / layout / wishlist.xml (jeśli nie, skopiuj go z 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-->
Skomentuj wiersze 47–65 z app / design / frontend / default / YOURTHEME / layout / newsletter.xml (jeśli nie, skopiuj go z app / design / frontend / rwd / default / layout / newsletter.xml)
newsletter </name> newsletter / manage / </path> Subskrypcje newslettera </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 (dostosuj do swoich wymagań)
.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;
}
Aby uniknąć usuwania linków, zaleciłbym przypisanie wartości identyfikatora na podstawie zmiennej $ _index, abyś mógł ukryć linki za pomocą CSS.
Oto co zrobiłem:
Z twojego pakietu / 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; ?>
Więc oczywiście możesz iść
#account-link-1 {
display:none;
}
Nie ma jednego sposobu na oskórowanie kota, ale jest to szybka i łatwa opcja, która nie wpływa na funkcjonalność.
Myślałem, że lepszym rozwiązaniem byłoby przepisanie bloku. Zostało to wspomniane powyżej, ale nie było żadnego przykładu:
Dodaj przepisanie do pliku config.xml w sekcji globalnej:
<blocks>
<customer>
<rewrite>
<account_navigation>Your_Module_Block_Customer_Account_Navigation</account_navigation>
</rewrite>
</customer>
</blocks>
Zastąp addLink w 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);
}
}
}
Tablica exclude_links mogłaby pobrać z ustawienia konfiguracji, jeśli nie chcesz na stałe kodować wykluczonych łączy.
właśnie o tym napisałem w Google: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/
Możemy zmienić prawie wszystkie aspekty układu standardowego układu Magento, jednak zdarzają się sytuacje, w których takie podejście zawodzi. W szczególności przejawia się to w chwili, gdy chcesz zmodyfikować blok top.links. Elementy w tym bloku są dodawane przy użyciu metody działania addLink, więc jeśli zastanawiasz się, jak usunąć niektóre łącza z zestawu domyślnego, odpowiedź brzmi: nie możesz! Niestety klasa bloków page / template_links nie implementuje metody akcji „removeLink”, dlatego należy usunąć cały blok za pomocą metody unsetChild i dodać blok linków z powrotem, dodając do niego własne linki w pliku local.xml.
Chciałbym najpierw powiedzieć, że istnieją różne sposoby rozwiązania problemów.
Jest to najprostszy sposób, aby znaleźć kod w layout.xml
pliku wewnątrz bazy, który chcesz usunąć, np. Jeśli chcę usunąć „Moje tagi”, po prostu skomentuj tę część.
<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>
Ale wiesz, że nie powinniśmy modyfikować pliku podstawowego, więc kolejną prostą metodą, którą można wykonać, jest
Usunięcie odsyłacza w pliku szablonu. W tym celu skopiuj navigation.phtml
plik do motywu (uwaga: struktura folderów powinna być taka sama) z base\default\template\customer\account\navigation.phtml
. co pokazano w powyższej odpowiedzi.
Pełne rozwiązanie do usuwania funkcji pulpitu konta obejmuje zarówno modyfikację po stronie klienta, jak i po stronie serwera. Jeśli tylko strona klienta zostanie usunięta i / lub ukryta, nic nie powstrzyma wytrawnych użytkowników przed dostępem do funkcji poprzez ręczne tworzenie tras w przeglądarce lub za pomocą bardziej wyrafinowanego „ataku” CURL (który może obejmować odpowiednie Token CSRF i przejdź przez nie).
Po stronie klienta można łatwo osiągnąć dzięki aktualizacjom XML, na co wskazuje mnóstwo już udzielonych odpowiedzi.
Strona serwera jest nieco bardziej złożona i wymaga zrozumienia usuwanej funkcjonalności.
Osobiście wybrałbym drogę używania obserwatorów do warunkowego zwracania zabronionych kodów statusu HTTP na każdej z tras usuwanej funkcji. Aby dowiedzieć się, które trasy należy obserwować, otwórz powiązany plik kontrolera i znajdź każdą z akcji frontonu, które nie powinny być już dostępne. Następnie utwórz moduł, który definiuje pola konfiguracji systemu do miękkiego wyłączania tej funkcji. Korzystając z tych pól konfiguracji systemu, warunkowo zaktualizuj XML układu interfejsu i warunkowo zwróć odpowiednie kody odpowiedzi HTTP dla każdej obserwowanej trasy.
Przykłady kodu dla każdego z powyższych kroków można znaleźć w ulubionej wyszukiwarce.
Dodaj do pliku local.xml ten kod
<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>
Testowane w Magento 1.7.0.2