Come rimuovere i collegamenti del dashboard dell'account cliente


39

Desidero rimuovere i seguenti collegamenti nel pannello di sinistra della dashboard dell'account cliente?

  • Le mie applicazioni
  • Registro dei regali
  • Punti premio
  • Collegamento carta regalo

Sto lavorando in Magento 1.7 Community Edition. Qualsiasi aiuto sarà apprezzato.


Puoi anche usare questa estensione 'plug and play' semplice e gratuita: magentocommerce.com/magento-connect/…
Gerard de Visser,

Magento, dove qualcosa di così apparentemente facile si trasforma in qualcosa di così inutilmente difficile.
Joshua34,

Risposte:


52

Passaggio 1: vai a (yourPackage / YourTemplate / customer / account / navigation.phtml)

Passaggio 2: sostituire la riga seguente

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

Il frammento di codice sopra riportato contiene il modo di rimuovere tutti i collegamenti di navigazione. Spero che questo possa aiutare tutti.

Link di riferimento: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links


5
Se riesci a risolvere qualcosa utilizzando il layout XML, ti consiglierei di utilizzare una soluzione hardcoded come questa. @Marius la sua risposta è molto più pulita.
Sander Mangel

1
@SanderMangel, vuoi dire If you can't??
Pratik,

2
No, significa "Vorrei consigli contro "
Fabian SCHMENGLER

Questa risposta non impedisce l'accesso alle funzionalità sottostanti dei sistemi che tenta di rimuovere: è necessario aggiungere un disclaimer alla risposta. Visitare i percorsi corretti o utilizzare l'arricciatura consentirà l'accesso completo senza restrizioni.
Luke A. Leber,

No, intende " sconsiglio "
Xenocide8998,

28

Vedo 2 opzioni qui.

Primo e più semplice: basta trovare i file di layout che aggiungono queste voci di menu e commentare il codice per loro.
Ad esempio My applicationsviene aggiunto app/design/frontend/{interface}/{theme}/layout/oauth.xmlattraverso questa porzione di 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>

Il secondo metodo, che non sono sicuro al 100%, funzionerà è quello di aggiungere questo xml all'interno del local.xmlfile di layout del tema:

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

Devi aggiungere un <action>tag per ogni link che desideri rimuovere.

C'è anche la terza opzione, se non si utilizzano affatto i moduli, è sufficiente disabilitarli. Questo può anche migliorare le prestazioni.
Per questo creare questo file: app/etc/modules/Zzzz.xmlcon questo contenuto:

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

Potresti avere dei problemi: ecco alcuni altri moduli che vuoi usare, dipende da quelli che vuoi disabilitare.


Grazie @ Mario per la risposta. Bene, ho provato la seconda opzione (removeLinkByUrl) che hai suggerito prima di porre la domanda. Ma sembra che non abbia funzionato per me.
Oshan,

4
La seconda opzione non può funzionare perché Mage_Customer_Block_Account_Navigationnon eredita da Mage_Page_Block_Template_Links.
mpw,

26

Esiste un'estensione FOSS che aggiunge l'opzione di backend ai collegamenti di account remoti.

C'è un secondo modulo (anche FOSS) che aggiunge il removeLinkmetodo in modo da poter utilizzare quanto segue nel tuolocal.xml

Disclaimer: sono uno sviluppatore della seconda estensione.

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

Avendo pasticciato con diverse tecniche dalle sostituzioni local.xml a PHP, queste soluzioni open source sono le mie preferite.
Michael Thompson,

5

La soluzione più semplice (implementazione e utilizzo) che ho trovato è quello di sostituire Mage_Customer_Block_Account_Navigationin app/code/locale aggiungere un removeLinkByNamemetodo, che fa la stessa cosa che la risposta di Oshan fa, ma è utilizzabile da file di layout. Anche una riscrittura di classe più tradizionale funzionerebbe, ma potrebbe potenzialmente causare conflitti con un plugin.

Avvertimento! Non testato!

Una soluzione più complicata sarebbe quella di scrivere il proprio modulo con un metodo Blockche si estende Mage_Customer_Block_Account_Navigatione include un removeLinkByNamemetodo. Perché ciò funzioni, dovresti rimuovere / disinserire il customer_account_navigationblocco e sostituirlo con quello per il tuo nuovo modulo. Da quel momento in poi, ogni volta che customer_account_navigationviene fatto riferimento nel layout, otterrai un'istanza con removeLinkByName.


Ho fatto la seconda opzione, è una buona dose di lavoro, ma funziona. Mi ci sono voluti circa due ore e lavoro come consulente Magento a tempo pieno e sviluppatore PHP / Linux. Se qualcuno ha bisogno di dettagli, PM me.
siliconrockstar,

la soluzione più semplice è quella di scavalcare una classe Core quando ci sono molte soluzioni più ordinate?
Ria Weyprecht,

5

Una soluzione rapida, per rimuovere tutte le voci dell'elenco Account personale sotto I miei ordini, inclusi accordi di fatturazione, profili ricorrenti, applicazioni personali e prodotti scaricabili. Rimuoverà anche i collegamenti My Wishlist & My Newsletter, attraverso il sito, testati su Magento 1.9:

Commenta le righe 31 - 66 da app / design / frontend / default / YOURTHEME / layout / wishlist.xml (se non ci sono copia da 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-->

Commenta le righe 47 - 65 da app / design / frontend / default / YOURTHEME / layout / newsletter.xml (se non ci sono copia da app / design / frontend / rwd / default / layout / newsletter.xml)

newsletter </name> newsletter / gestisci / </path> iscrizioni alla newsletter </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 (regolare in base alle proprie esigenze)

.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

Per evitare di rimuovere i collegamenti, consiglierei di assegnare i valori ID in base alla variabile $ _index, in modo da poter nascondere i collegamenti tramite CSS.

Ecco cosa ho fatto:

Dal tuo pacchetto / YourTemplate / cliente / 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; ?>

Quindi ovviamente puoi andare

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

Non esiste un modo per scuoiare un gatto, ma questa è un'opzione semplice e veloce senza compromettere realmente alcuna funzionalità.


1
Si noti esplicitamente che ciò non impedirà agli utenti di accedere alla funzionalità dietro le funzionalità in questione. L'accesso completo è una modifica CSS o una modifica rapida della barra degli indirizzi ... quindi non fare affidamento sulle persone che non utilizzano le funzionalità.
Luke A. Leber,

È abbastanza giusto e capisco perfettamente da dove vieni. Non volevo assolutamente rimuovere questa funzionalità, ma volevo nasconderla perché il cliente pensava specificamente che ciò potesse confondere i suoi clienti. Ognuno per conto proprio immagino!
Thomas Harding,

5

Ho pensato che una soluzione migliore sarebbe stata riscrivere il blocco. Questo è stato menzionato sopra ma non vi è stato alcun esempio:

Aggiungi la riscrittura a config.xml nella sezione globale:

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

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

L'array exclude_links potrebbe estrarre da un'impostazione di configurazione se non si desidera codificare i collegamenti esclusi.


3

questo è ciò su cui ho cercato su Google: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Possiamo cambiare quasi tutti gli aspetti del layout del layout standard di Magento, tuttavia ci sono alcune situazioni in cui questo approccio fallisce. In particolare, questo si manifesta nel minuto in cui si desidera modificare il blocco top.links. Gli elementi in questo blocco vengono aggiunti utilizzando il metodo di azione addLink, quindi se ti stai chiedendo come rimuovere alcuni collegamenti dal set predefinito, la risposta è che non puoi! Sfortunatamente, la classe di blocco page / template_links non implementa un metodo di azione 'removeLink', quindi il resort è rimuovere l'intero blocco usando l'approccio unsetChild e aggiungere nuovamente il blocco di collegamenti con i nostri collegamenti aggiunti ad esso in local.xml.


2

Vorrei prima che tu dicessi che ci sono diversi modi per risolvere i tuoi problemi.

  1. È il modo più semplice per trovare il codice nel layout.xmlfile all'interno della base che si desidera rimuovere, ad esempio: se desidero rimuovere i "I miei tag", commenta solo la parte.

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

    Ma sai che non dovremmo modificare il file di base, quindi un altro semplice metodo che potrebbe essere eseguito è

  2. Disattivazione del collegamento nel file modello. Per copiare il navigation.phtmlfile sul tema (Nota: la struttura delle cartelle deve essere la stessa) da base\default\template\customer\account\navigation.phtml. che è mostrato nella risposta sopra.

  3. Un altro compito noioso è riscrivere il modulo principale e creare un metodo "RemoveLinkByName".


2

Una soluzione completa per la rimozione delle funzionalità del dashboard dell'account include sia una modifica lato client che una modifica lato server. Se solo il lato client viene rimosso e / o nascosto, non c'è nulla che impedisce agli utenti esperti di tecnologia di accedere ancora alle funzionalità creando manualmente i percorsi nel loro browser o utilizzando un "attacco" CURL più sofisticato (che può includere il corretto Token CSRF e scivola fino in fondo).

Il lato client è facilmente raggiungibile attraverso gli aggiornamenti XML, come indicato dalla pletora di risposte già fornite.

Il lato server è un po 'più complesso e richiede una comprensione della funzionalità che viene rimossa.

Personalmente, seguirei la strada dell'uso degli osservatori per restituire condizionalmente codici di stato HTTP proibiti su ciascuna delle rotte della funzione da rimuovere. Per scoprire quali percorsi osservare, aprire il file del controller associato e trovare ciascuna delle azioni front-end che non dovrebbero più essere disponibili. Successivamente, crea un modulo che definisce i campi di configurazione del sistema per disabilitare tale funzione. Utilizzando questi campi di configurazione del sistema, aggiornare in modo condizionale l'XML del layout del frontend e allo stesso modo restituire in modo condizionale i codici di risposta HTTP corretti per ciascuna route osservata.

Esempi di codice per ciascuno dei passaggi precedenti sono disponibili tramite il tuo motore di ricerca preferito.


1

Aggiungi a un file local.xml questo codice

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

Testato in Magento 1.7.0.2


In Magento 1.8.1.0 questo si traduce in Avviso: Argomento mancante 2 per Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.