2010-12-12 12 views
1

Précédemment dans Magento, le lien de liste a été ajouté à l'aide de la suivante (en wishlist.xml):Magento - supprimer le lien de liste de souhaits dans 1.4.2?

<action method="addWishlistLink"></action> 

Et vous pouvez passer outre cela et supprimer à l'aide les éléments suivants (dans votre local.xml):

<remove name="wishlist_link"/> 

Cependant, dans le plus récent Magento, 1.4.2, ils ont changé la façon dont le lien de liste est ajouté à ce qui suit:

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action> 

Quelqu'un sait comment t o supprimer le lien de liste de souhaits maintenant qu'ils ont changé comment il est ajouté?

Répondre

9

Il semble qu'il ya pas de moyen public pour éliminer de manière fiable le lien de liste bloc de la mise en page. (Vous pouvez passer à la fin pour une solution de contournement)

Le addLinkBlock suppose la présence du bloc qui a été adoptée, donc l'utilisation supprimer de la façon dont vous décrivez les résultats dans une erreur fatale d'être jeté

Fatal error: Call to a member function getPosition() on a non-object in /Users/alanstorm/Sites/magento1point4.2.dev/app/code/core/Mage/Page/Block/Template/Links.php on line 112 

Voici le code de base qui provoque cette erreur

app/code/core/Mage/Page/Block/Template/Links.php 
public function addLinkBlock($blockName) 
{ 
    $block = $this->getLayout()->getBlock($blockName); 
    $this->_links[$this->_getNewPosition((int)$block->getPosition())] = $block;   
    return $this; 
} 

Cette méthode suppose que sa va être en mesure de sortir un bloc quel que soit le nom est transmis, nous ne pouvons pas simplement supprimer le bloc wishlist_link que possible dans les versions précédentes.

Le seul mécanisme pour la suppression d'un lien semble être la méthode suivante sur la même classe de bloc

app/code/core/Mage/Page/Block/Template/Links.php 
public function removeLinkByUrl($url) 
{ 
    foreach ($this->_links as $k => $v) { 
     if ($v->getUrl() == $url) { 
      unset($this->_links[$k]); 
     } 
    } 
    return $this; 
} 

Cependant, cela se fait à l'aide comparaison de chaînes, et il n'y a aucun moyen fiable (que je sache) à générer un objet URL à partir d'un fichier de modèle, le transformer en chaîne et le transmettre dans la méthode (ce qui serait nécessaire, car de nombreux paramètres de configuration peuvent modifier l'URL finale de la chaîne). Cela rend cette méthode inutile pour nos besoins.

Donc, ce que nous peut modifier le bloc wishlist_link existant pour utiliser un modèle vierge ou inexistant. De cette façon, le bloc restitue encore, mais il se traduit par une chaîne vide. Le résultat final est que nous évitons l'erreur fatale mentionnée ci-dessus, tout en réussissant à supprimer le lien de nos pages sélectionnées.

Ce qui suit supprimerait le lien de toutes les pages à l'aide du bloc default handle.

<!-- file: local.xml --> 
<layout> 
    <default> 
     <reference name="wishlist_link"> 
      <action method="setTemplate"><template>blank-link.phtml</template></action>   
     </reference>    
    </default> 
</layout> 
+0

Bravo pour ça. Peu hacky, mais ce n'est pas nouveau pour Magento alors devine que je vais devoir aller avec ça pour le moment. Une idée de pourquoi le changement? –

+0

En fait, juste essayé cela et pas de joie, voyant encore le lien. D'autres idées? –

+0

Je dirais que ce n'est pas tellement un changement qu'un bug involontaire créé par une nouvelle fonctionnalité. Cela fonctionne pour moi sur une installation par défaut, donc je vérifie si votre fichier local.xml est chargé, et que tout est entouré par le bon handle. Une fois que vous avez confirmé cela, ajoutez du code de débogage à la méthode setTemplate de la classe de modèle de base pour vous assurer que la méthode d'action est réellement appelée. Peut-être avez-vous une autre mise à jour de disposition qui remplace cette nouvelle? –

1

Vous pouvez supprimer le lien de liste à partir du panneau d'administration système> Configuration> Liste> Activé = « No »

+0

Je ne veux pas désactiver la fonctionnalité de liste de souhaits, il suffit de supprimer le lien de certaines pages. –

3

In your local.xml file,

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <default> 
    <reference name="root"> 
     <reference name="top.links"> 
     <!-- Remove wishlist link in magento 1.4.x and newer --> 
     <remove name="wishlist_link"/> 
     </reference> 
    </reference> 
    </default> 
</layout> 
1

Add the following to your local.xml file.

<reference name="top.links"> 
    <remove name="wishlist_link"/> 
</reference> 

This works! I have removed Wishlink from Toplinks and wanted to add it back into another block but that doesn't seem possible when you remove it in this way. Sadly.

0

I know I'm years late here, but for all of those people who are still looking for answers to this.

I have a way to work around this issue that is only a bit of extra work but it's not hacky and it gives you FULL control of your top.links block.

Simply unset the top.links et recréer, il sera vide (pas plus wishlist_link bloc) et tout ce que vous avez à faire est d'ajouter selon les liens que vous voulez à l'intérieur de il! (Faites tout cela dans votre fichier theme/layout/local.xml bien sûr).

<layout version="0.1.0"> 
<default> 
    <!-- HEADER --> 
    <reference name="header"> 

     <!-- Unsetting the already existing top links block --> 
     <action method="unsetChild"> 
      <name>topLinks</name> 
     </action> 

     <!-- Re-creating a new top links block --> 
     <block type="page/template_links" name="top.links" as="topLinks"> 
      <!-- EXAMPLE: Account Dashboard Link --> 
      <action method="addLink" translate="label title" module="catalog"> 
       <label>Account Dashboard</label> 
       <url helper="customer/getAccountUrl"/> 
       <title>Account Dashboard</title> 
      </action> 
      <!-- You can add any other links that you want --> 
     </block> 

    </reference> 
</default> 
</layout> 

Rappelez-vous aussi que pour certains liens comme Sign In et Log Out vous aurez besoin de faire référence à votre top.links bloc à l'intérieur du <customer_logged_out> et <customer_logged_in> approprié prendra en charge au lieu de l'intérieur de <default> comme guide pour cela, vous pouvez consulter le fichier customer.xml de Magento.

IMPORTANT: S'il y a des modules inclus dans votre projet qui ajoutent des liens vers le bloc top.links, ces liens ne seront pas visibles parce local.xml est traitée en dernier, donc il suffit de garder à l'esprit que lorsque vous utilisez cette méthode :)

Je suis un développeur certifié Front End Magento avec plus de 3 ans d'expérience et j'ai surmonté BEAUCOUP de maux de tête XML de mise en page au point où nous sommes devenus les meilleurs amis.