Comment supprimer les liens du tableau de bord du compte client

39

Je souhaite supprimer les liens suivants dans le panneau de gauche du tableau de bord du compte client?

  • mes applications
  • Registre des cadeaux
  • Points de récompense
  • Lien de carte cadeau

Je travaille dans Magento 1.7 Community Edition. Toute aide serait appréciée.

Oshan
la source
Vous pouvez également utiliser cette extension «plug and play» gratuite et simple: magentocommerce.com/magento-connect/…
Gerard de Visser
Magento, où quelque chose d'aussi apparemment simple se transforme en quelque chose de si inutilement difficile.
Joshua34

Réponses:

52

Étape 1: Accédez à (yourPackage / YourTemplate / customer / account / navigation.phtml).

Étape 2: remplacez la ligne ci-dessous

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

L'extrait de code ci-dessus contient le moyen de supprimer tous les liens de navigation. J'espère que cela aidera tous.

Lien de référence: https://github.com/Aproducktion/Magento-Remove-Dashboard-Links

Oshan
la source
5
Si vous pouvez réparer quelque chose en utilisant le format XML, je vous conseillerais d'utiliser une solution codée en dur comme celle-ci. @Marius sa réponse est beaucoup plus propre.
Sander Mangel
1
@SanderMangel, tu veux dire If you can't??
Pratik
2
Non, il veut dire "je conseillerais contre "
Fabian Schmengler le
Cette réponse n'empêche pas l'accès aux fonctionnalités sous-jacentes des systèmes qu'elle tente de supprimer. Un avis de non-responsabilité doit être ajouté à la réponse. Visiter les bons itinéraires ou utiliser curl permettra un accès complet et sans entrave.
Luke A. Leber
Non, il veut dire «je déconseillerais »
Xenocide8998
28

Je vois 2 options ici.

Le premier et le plus simple: il suffit de rechercher les fichiers de mise en page qui ajoutent ces éléments de menu et de commenter le code correspondant.
Par exemple My applicationsest ajouté à app/design/frontend/{interface}/{theme}/layout/oauth.xmltravers ce morceau de 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>

La deuxième méthode, pour laquelle je ne suis pas sûr à 100% que cela fonctionnera, consiste à ajouter ce XML dans le local.xmlfichier de mise en page de votre thème:

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

Vous devez ajouter une <action>balise pour chaque lien à supprimer.

Il existe également la troisième option. Si vous n'utilisez pas les modules, désactivez-les. Cela peut également améliorer les performances.
Pour cela créer ce fichier: app/etc/modules/Zzzz.xmlavec ce contenu:

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

Vous avez peut-être des problèmes avec d'autres modules que vous souhaitez utiliser, dépend de ceux que vous souhaitez désactiver.

Marius
la source
Merci @Marius pour la réponse. Eh bien, j'ai essayé la deuxième option (removeLinkByUrl) que vous avez suggérée avant de poser la question. Mais semble que cela n'a pas fonctionné pour moi.
Oshan
4
La deuxième option ne peut pas fonctionner car Mage_Customer_Block_Account_Navigationelle n’hérite pas de Mage_Page_Block_Template_Links.
mpw
26

Il existe une extension FOSS qui ajoute l’option backend aux liens de comptes distants.

Il existe un second module (également FOSS) qui ajoute la removeLinkméthode afin que vous puissiez utiliser les éléments suivants dans votrelocal.xml

Disclaimer: Je suis un développeur de la deuxième extension.

<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
la source
Après avoir manipulé plusieurs techniques de local.xml au détriment de PHP, ces solutions open source sont mes préférées.
Michael Thompson
5

La solution la plus simple (implémentation et utilisation) que j'ai trouvée consiste à remplacer Mage_Customer_Block_Account_Navigationin app/code/localet à ajouter une removeLinkByNameméthode qui fait la même chose que la réponse d'Oshan , mais qui est utilisable à partir de fichiers de présentation. Une réécriture de classe plus traditionnelle fonctionnerait également, mais pourrait potentiellement causer des conflits avec un plugin.

Attention! Non testé!

Une solution plus compliquée consisterait à écrire votre propre module avec une Blockextension Mage_Customer_Block_Account_Navigationet une removeLinkByNameméthode. Pour que cela fonctionne, vous devez supprimer / annuler la définition du customer_account_navigationbloc et le remplacer par celui de votre nouveau module. À partir de ce moment-là, chaque fois que la disposition customer_account_navigationest référencée, vous obtenez une instance avec removeLinkByName.

mpw
la source
J'ai fait la deuxième option, c'est beaucoup de travail, mais ça marche. Cela m'a pris environ deux heures et je travaille comme consultant à plein temps pour Magento et développeur PHP / Linux. Si quelqu'un a besoin de détails, PM moi.
siliconrockstar
La solution la plus simple consiste-t-elle à remplacer une classe de base lorsqu'il existe de nombreuses solutions plus simples?
Ria Weyprecht
5

Solution rapide: supprimer tous les éléments de la liste Mon compte situés sous Mes commandes, notamment les accords de facturation, les profils récurrents, les applications et les produits téléchargeables. Supprime également les liens Ma liste de souhaits et Ma newsletter, sur l'ensemble du site, testés sur Magento 1.9:

Commentez les lignes 31 à 66 de app / design / frontend / default / YOURTHEME / layout / wishlist.xml (sinon, copiez-le depuis 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-->

Commentez les lignes 47 à 65 de app / design / frontend / default / YOURTHEME / layout / newsletter.xml (sinon, copiez-le depuis app / design / frontend / rwd / default / layout / newsletter.xml)

newsletter </ name> newsletter / gérer / </ path> Abonnements à la 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 (ajuster selon vos besoins)

.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
la source
5

Pour éviter de supprimer les liens, je vous recommande d'attribuer des valeurs d'ID basées sur la variable $ _index, afin que vous puissiez masquer les liens via CSS.

Voici ce que j'ai fait:

À partir de votrePackage / 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; ?>

Alors évidemment, vous pouvez y aller

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

Il n’ya pas un seul moyen de dépouiller un chat, mais c’est une option simple et rapide sans compromettre les fonctionnalités.

Thomas Harding
la source
1
Devrait explicitement noter que cela n'empêchera pas les utilisateurs d'accéder à la fonctionnalité derrière les fonctionnalités en question. L’accès complet est soit une modification CSS, soit une barre d’adresse rapide supprimée ... ne vous fiez donc pas aux personnes qui n’utilisent pas ces fonctionnalités.
Luke A. Leber
C'est assez juste et je comprends tout à fait d'où vous venez. Je ne voulais pas strictement supprimer cette fonctionnalité, mais je voulais la masquer, car le client pensait que cela risquait de semer la confusion chez ses clients. Chacun à leur tour je suppose!
Thomas Harding
5

Je pensais qu'une meilleure solution serait de réécrire le bloc. Cela a été mentionné ci-dessus, mais il n'y avait pas d'exemple:

Ajoutez la réécriture à votre config.xml dans la section globale:

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

Remplacez addLink dans 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);
        }
    }
}

Le tableau exclude_links peut être extrait d'un paramètre de configuration si vous ne souhaitez pas coder en dur les liens exclus.

N Lewis
la source
3

C'est ce que j'ai googlé à ce sujet: http://magebase.com/magento-tutorials/5-useful-tricks-for-your-magento-local-xml/

Nous pouvons modifier presque tous les aspects de la présentation standard de Magento, mais cette approche échoue dans certaines situations. Cela se manifeste notamment à la minute où vous souhaitez modifier le bloc top.links. Les éléments de ce bloc sont ajoutés à l'aide de la méthode d'action addLink. Si vous vous demandez comment supprimer certains liens du jeu par défaut, la réponse est non, vous ne pouvez pas! Malheureusement, la classe de bloc page / template_links n'implémentant pas de méthode d'action 'removeLink', le recours consiste à supprimer tout le bloc à l'aide de l'approche unsetChild et à ajouter le bloc de liens en ajoutant nos propres liens au fichier local.xml.

melaxon
la source
2

J'aimerais tout d'abord que vous disiez qu'il existe différentes façons de résoudre vos problèmes.

  1. C'est le moyen le plus simple qui consiste à trouver le code dans le layout.xmlfichier à l'intérieur de la base que vous souhaitez supprimer, par exemple: si je souhaite supprimer les "Mes tags", il suffit de commenter la partie.

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

    Mais vous savez que nous ne devrions pas modifier le fichier de base, une autre méthode simple suivante peut être exécutée.

  2. Suppression du lien dans votre fichier de modèle.Pour copier votre navigation.phtmlfichier dans votre thème (Remarque: la structure des dossiers doit être identique) à partir du base\default\template\customer\account\navigation.phtml. qui est indiqué dans la réponse ci-dessus.

  3. Une autre tâche fastidieuse consiste à réécrire votre module principal et à créer une méthode "RemoveLinkByName".

aton1004
la source
2

Une solution complète pour supprimer les fonctionnalités du tableau de bord du compte comprend à la fois une modification côté client et une modification côté serveur. Si seul le côté client est supprimé et / ou masqué, rien n'empêche les utilisateurs avisés d'accéder aux fonctionnalités en construisant manuellement les itinéraires dans leur navigateur ou en utilisant une "attaque" CURL plus sophistiquée (pouvant inclure la CSRF jeton et glisser à travers).

Le côté client est facilement atteint par le biais de mises à jour XML, comme l’indique la pléthore de réponses déjà données.

Le côté serveur est un peu plus complexe et nécessite une compréhension de la fonctionnalité à supprimer.

Personnellement, je voudrais utiliser des observateurs pour renvoyer sous condition des codes d’état HTTP interdits sur chacun des itinéraires de la fonctionnalité à supprimer. Afin de déterminer les itinéraires à observer, ouvrez le fichier de contrôleur associé et recherchez chacune des actions frontales qui ne devraient plus être disponibles. Créez ensuite un module qui définit les champs de configuration du système pour la désactivation logicielle de cette fonctionnalité. À l'aide de ces champs de configuration système, mettez à jour de manière conditionnelle le XML de présentation de l'interface et renvoyez de manière conditionnelle les codes de réponse HTTP appropriés pour chaque route observée.

Des exemples de code pour chacune des étapes ci-dessus peuvent être trouvés via votre moteur de recherche préféré.

Luke A. Leber
la source
1

Ajouter à un fichier local.xml ce code

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

Testé dans Magento 1.7.0.2

Lavb
la source
Dans Magento 1.8.1.0, cela entraîne Avertissement: Argument manquant 2 pour Mage_Customer_Block_Account_Navigation :: addLink ()
Anthony