Jak usunąć łącza pulpitu klienta

39

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.

Oshan
źródło
Możesz także skorzystać z tego bezpłatnego i łatwego rozszerzenia „plug and play”: magentocommerce.com/magento-connect/…
Gerard de Visser
Magento, w którym coś tak pozornie łatwego zmienia się w coś tak niepotrzebnie trudnego.
Joshua34

Odpowiedzi:

52

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

Oshan
źródło
5
Jeśli możesz coś naprawić za pomocą kodu XML układu, radziłbym użyć takiego rozwiązania. @Marius jego odpowiedź jest o wiele czystsza.
Sander Mangel
1
@SanderMangel, masz na myśli If you can't?
Pratik
2
Nie, on ma na
myśli
Ta odpowiedź nie uniemożliwia dostępu do podstawowych funkcji systemów, które próbuje usunąć - do odpowiedzi należy dodać zastrzeżenie. Zwiedzanie prawidłowych tras lub korzystanie z curl umożliwi pełny nieograniczony dostęp.
Luke A. Leber
Nie oznacza on „Chciałbym odradzam
Xenocide8998
28

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 applicationsjest dodawany app/design/frontend/{interface}/{theme}/layout/oauth.xmlprzez 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.xmlpliku 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.xmlz 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ć.

Marius
źródło
Dzięki @Marius za odpowiedź. Wypróbowałem drugą opcję (removeLinkByUrl), którą zasugerowałeś przed postawieniem pytania. Ale wygląda na to, że to nie działało dla mnie.
Oshan
4
Druga opcja nie może działać, ponieważ Mage_Customer_Block_Account_Navigationnie dziedziczy Mage_Page_Block_Template_Links.
mpw
26

Istnieje rozszerzenie FOSS, które dodaje opcję zaplecza do zdalnych łączy kont.

Istnieje drugi moduł (również FOSS), który dodaje removeLinkmetodę, 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>
Alex
źródło
Mając do czynienia z kilkoma technikami od local.xml zastępuje PHP, te rozwiązania open source są moje ulubione.
Michael Thompson
5

Najprostszym rozwiązaniem (wdrożenie i wykorzystanie) Znalazłem ma zastąpić Mage_Customer_Block_Account_Navigationw app/code/locali dodać removeLinkByNamemetodę, 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, Blockktóry rozszerza Mage_Customer_Block_Account_Navigationi zawiera removeLinkByNamemetodę. Aby to zadziałało, musisz usunąć / rozbroić customer_account_navigationblok i zastąpić go nowym dla modułu. Od tego momentu, za każdym razem, gdy customer_account_navigationma się odniesienie w układzie, otrzymasz instancję z removeLinkByName.

mpw
źródło
Zrobiłem drugą opcję, to sporo pracy, ale działa. Zajęło mi to około dwóch godzin i pracuję jako etatowy konsultant Magento i programista PHP / Linux. Jeśli ktoś potrzebuje szczegółów, wyślij mi wiadomość.
siliconrockstar
najprostszym rozwiązaniem jest przesłonić klasę Core, gdy istnieje wiele ciekawszych rozwiązań?
Ria Weyprecht
5

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;
}
Joshua34
źródło
5

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ść.

Thomas Harding
źródło
1
Należy wyraźnie zaznaczyć, że nie powstrzyma to użytkowników przed dostępem do funkcji związanych z danymi funkcjami. Pełny dostęp to edycja CSS lub szybka edycja paska adresu ... więc nie polegaj na ludziach, którzy nie korzystają z tych funkcji.
Luke A. Leber
To dość uczciwe i całkowicie rozumiem, skąd pochodzisz. Nie chciałem całkowicie usuwać tej funkcji, ale chciałem ją ukryć, ponieważ klient czuł, że może to wprowadzić klientów w błąd. Chyba każdy według własnego uznania!
Thomas Harding
5

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.

N Lewis
źródło
3

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.

melakson
źródło
2

Chciałbym najpierw powiedzieć, że istnieją różne sposoby rozwiązania problemów.

  1. Jest to najprostszy sposób, aby znaleźć kod w layout.xmlpliku 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

  2. Usunięcie odsyłacza w pliku szablonu. W tym celu skopiuj navigation.phtmlplik do motywu (uwaga: struktura folderów powinna być taka sama) z base\default\template\customer\account\navigation.phtml. co pokazano w powyższej odpowiedzi.

  3. Kolejnym żmudnym zadaniem jest przepisanie modułu podstawowego i utworzenie metody „RemoveLinkByName”.

aton1004
źródło
2

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.

Luke A. Leber
źródło
1

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

lavb
źródło
W Magento 1.8.1.0 powoduje to Ostrzeżenie: brak argumentu 2 dla Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony