2010-12-12 8 views
1

Zuvor in Magento wurde die Wunschliste Link hinzugefügt die Verwendung von folgenden (in wishlist.xml):Magento - Entfernen Wunschliste in 1.4.2?

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

Und man konnte, dass außer Kraft setzen und entfernen Sie die folgende (in Ihrem local.xml) mit:

<remove name="wishlist_link"/> 

jedoch in der neuesten Magento, 1.4.2, haben sie verändert, wie der Wunschliste Link auf folgendes hinzugefügt wird:

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

Wer weiß, wie t o den Link der Wunschliste entfernen, nachdem er geändert wurde, wie er hinzugefügt wurde?

Antwort

9

Es scheint, gibt es keine öffentlich zugängliche Art und Weise entfernen, um den Wunschliste Link Block aus dem Layout zuverlässig zu entfernen. (Sie können für eine Abhilfe zum Ende springen)

Die addLinkBlock setzt das Vorhandensein des Blocks, die übergeben worden ist, so entfernen Sie mit der Art und Weise Sie führen zu einem fatalen Fehler beschreiben

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 

Hier geworfen ist der Kern-Code, dass Fehler

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

verursacht Dieses Verfahren nimmt seinen einen Block in der Lage sein, ziehen Sie von welchem ​​Namen übergeben wird, so können wir nicht nur den wishlist_link Block entfernen, wie wir in früheren Versionen konnte.

Der einzige Mechanismus für einen Link zu entfernen erscheint

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

jedoch das folgende Verfahren auf der gleichen Block Klasse zu sein, wird dies mit String-Vergleich durchgeführt, und es gibt keine zuverlässige Möglichkeit (die ich kenne) zu Generieren Sie ein URL-Objekt aus einer Layoutdatei, umwandeln Sie es als Zeichenfolge, und übergeben Sie es an die Methode (dies wäre erforderlich, da zahlreiche Konfigurationseinstellungen die endgültige URL der Zeichenfolge ändern können). Das macht diese Methode für unsere Bedürfnisse nicht hilfreich. So

, was wir können modifizieren den vorhandenen wishlist_link Block eine leere oder nicht vorhandene Vorlage zu verwenden. Auf diese Weise wird der Block weiterhin gerendert, aber als leere Zeichenfolge dargestellt. Das Endergebnis ist, dass wir den oben erwähnten fatalen Fehler vermeiden, aber dennoch den Link von unseren ausgewählten Seiten entfernen.

Die folgend würde die Verbindung von alle den Seiten mit dem default handle.

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

Prost für das. Bit hacky, aber das ist nichts Neues für Magento, also schätze, ich muss jetzt damit anfangen. Irgendeine Idee warum die Änderung? –

+0

Wirklich, gerade versucht dies und keine Freude, immer noch den Link zu sehen. Noch mehr Ideen? –

+0

Ich würde sagen, es ist nicht so sehr eine Veränderung als ein unbeabsichtigter Fehler durch neue Funktionalität. Das funktioniert für mich bei einer Standardinstallation, also würde ich prüfen, ob Ihre local.xml geladen wird und alles vom richtigen Handle umgeben ist. Nachdem Sie dies bestätigt haben, fügen Sie der setTemplate-Methode der Basisvorlagenklasse Debugcode hinzu, um sicherzustellen, dass die Aktionsmethode wirklich aufgerufen wird. Vielleicht haben Sie ein anderes Layoutupdate, das dieses neue überschreibt? –

1

Sie können die Wunschliste Link aus der Admin-Panel System> Konfiguration> Wunschliste> Aktiviert = „No“

+0

Ich möchte die Wunschliste Funktion nicht deaktivieren, entfernen Sie einfach den Link von bestimmten Seiten. –

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 Block und neu erstellen entfernen, wird es (nicht mehr wishlist_link Block) leer sein, und alles, was Sie tun müssen, ist hinzuzufügen, je nachdem, was verbinden Sie innen wollen von es! (Tun Sie das alles natürlich in Ihrer Datei theme/layout/local.xml).

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

auch, dass wie Sign In für einige Links erinnern und Log Out Sie benötigen, um Ihre top.links Block innerhalb der entsprechenden <customer_logged_out> und <customer_logged_in> Griffe statt innerhalb von <default> als Leitfaden für diese verweisen Sie auf Magento customer.xml Datei suchen.

WICHTIG: Wenn es irgendwelche Module in Ihrem Projekt enthalten, die Links zu den top.links Block hinzufügen, werden diese Verbindungen nicht angezeigt, weil local.xml zuletzt bearbeitet wird, so halten nur, dass im Auge, wenn Sie diese Methode verwenden :)

Ich bin ein zertifizierter Magento-Frontend-Entwickler mit über 3 Jahren Erfahrung und ich habe viele Layout-XML-Kopfschmerzen überwunden, bis wir die besten Freunde wurden.

Verwandte Themen