Best Practices Weg, um Magento Top-Links zu bearbeiten

22

Nehmen wir an, wir möchten ein Warenkorbsymbol direkt vor dem Link "Mein Warenkorb" in den Top-Links von Magento einfügen (siehe Top-Links unten).

Bildbeschreibung hier eingeben

Wie geht das am besten?

  1. Mach irgendwas mit toplinks.php?
  2. Mach was mit links.phtml?
  3. Eine XML-Datei?
  4. Irgendwelche anderen Optionen?

Ich verstehe, dass dies mit CSS gemacht werden kann, aber da mein Anpassungsbedarf wächst, möchte ich wissen, wie dies ohne CSS gemacht werden kann, damit ich schwierigere Dinge anpassen kann.

Raphael Rafatpanah
quelle

Antworten:

12

Bearbeiten Sie auf keinen Fall die Vorlagendatei ( links.phtml). Dies dient als allgemeine Vorlage für alle Linklisten. Zum Beispiel wird es auch für die Links in der Fußzeile verwendet.
Mit können toplinks.phpSie tun, was Sie wollen, da es seit CE v1.4.0.1 veraltet ist.
Ich empfehle die Verwendung der XML-Dateien, die die Links zum obersten Container hinzufügen, um das zu erreichen, was Sie benötigen.
Die addLinkMethode, die beim Hinzufügen eines neuen Links aufgerufen wird, unterstützt einige Parameter, mit denen Sie Klassen und andere Attribute für liund aTags in den Links sowie Text vor und nach dem Link hinzufügen können .

public function addLink($label, $url='', $title='', $prepare=false, $urlParams=array(),
        $position=null, $liParams=null, $aParams=null, $beforeText='', $afterText='')
    { ... }

Wenn Sie ein Symbol , um mein Menü hinzufügen möchten , können Sie das Set $beforeTextzu <span class="icon"></span>und fügen Sie einige Arten auf das Symbol Klasse.
Für die Warenkorb- und Checkout-Links ist es etwas kniffliger, da sie über ein Blockobjekt hinzugefügt werden, das nicht direkt aus der Layoutdatei stammt.
Wenn Sie für den Einkaufswagen oder die Kassen etwas anderes benötigen, müssen Sie nur die Methoden Mage_Checkout_Block_Links::addCartLink()oder überschreiben Mage_Checkout_Block_Links::addCheckoutLink(). Diese 2 rufen dasselbe auf addLink()und Sie können ihr verschiedene Parameter übergeben.

Marius
quelle
1
Dies ist genau die Art von Erklärung, nach der ich gesucht habe. Ich habe definitiv viel zu lernen vor mir, aber jetzt habe ich eine Idee, wo ich anfangen soll. Ich werde versuchen, mein Icon (vom Bootstrap) mit dem folgenden Text hinzuzufügen: $ beforeText = '<i class = "icon-shopping-cart"> </ i>' - Vielen Dank!
Raphael Rafatpanah
Welche XML-Datei würde ich dafür verwenden?
Raphael Rafatpanah
Ich habe erklärt, dass Sie dies für die Warenkorb- und Checkout-Links nicht aus der Layoutdatei heraus tun können. Sie müssen die Methode außer Kraft setzenMage_Checkout_Block_Links::addCartLink()
Marius
1
Okay. Ich gehe davon aus, die Methode zu überschreiben, die ich zum Hinzufügen einer Datei zu meinen benutzerdefinierten Designdateien benötige, und rufe die Methode dort auf, wodurch die vorherige Instanz überschrieben wird. Würde es Ihnen etwas ausmachen, mich in die richtige Richtung zu weisen, zum Beispiel welche Datei die Methode Mage_Checkout_Block_Links enthalten würde? Ist es links.php?
Raphael Rafatpanah
Wenn Sie sich für die XML-Route entscheiden (was Sie auf jeden Fall beachten sollten), <span class="icon"></span>müssen Sie diese wie folgt einschließen, um sie als Vorher-Text zu verwenden <![CDATA[<span class="icon"></span>]]>. <beforeText><![CDATA[<span class="icon"></span>]]></beforeText>
Da der
9

Falls Sie eine benutzerdefinierte Vorlage nur für Top-Links anwenden müssen, können Sie dies in der local.xml Ihres Themas tun:

<default>
    <reference name="top.links">

        <action method="setTemplate">
            <template>page/template/my_links.phtml</template>
        </action>

    </reference>
<default>

Kopieren Sie dann page / template / links.phtml und benennen Sie es in page / template / my_links.phtml um und tun Sie alles, was Sie in dieser neuen Vorlagendatei benötigen.

So fügen Sie über local.xml einen benutzerdefinierten Link zu Top Links hinzu:

<reference name="top.links">
    <action method="addLink" translate="label title">
        <label>My Link</label>
        <url>path/to/page</url>
        <title>My link tooltip</title>
        <prepare>true</prepare>
        <urlParams/>
        <position>150</position>
        <liParams>id="my-custom-id"</liParams>
    </action>
</reference>

Siehe auch diese Seite: http://www.classyllama.com/development/magento-development/editing-magentos-top-links-the-better-way

zitix
quelle
Kann ich mit dieser Methode HTML-Code zwischen den einzelnen Links hinzufügen?
Raphael Rafatpanah
@RaphaelRafatpanah Ja, in links.phtml gibt es eine Schleife <?php foreach($_links as $_link): ?>. Innerhalb dieser Schleife können Sie beliebigen HTML-Code hinzufügen.
Zitix
Aber dann würde es zu jedem Link hinzugefügt, ja? Ich bin auf der Suche nach benutzerdefinierten HTML-Code zwischen den einzelnen Links. Ich glaube auch, dass die foreach-Schleife sowohl für die Fußzeilenlinks als auch für die Kopfzeilenlinks verwendet wird. Wenn ich also HTML zwischen Links hinzufüge, werden sie auch auf die Fußzeilenlinks angewendet.
Raphael Rafatpanah
1
Das ist der Trick: Nachdem Sie page / template / my_links.phtml (eine Kopie der ursprünglichen links.phtml ) erstellt und den Code hinzugefügt haben , den ich in Ihrer local.xml gepostet habe , wird diese Vorlage nur zum Rendern von Top-Links verwendet. Keine Fußzeilenlinks oder andere Links.
Zitix
0

Bitte finden Sie diesen Pfad, um die Top-Links zu ändern:

/app/design/frontend/base/default/layout/customer.xml  

und suche nach: Anmelden (In meinem Fall).

Ändern Sie nun Titel und Bezeichnung mit Ihrem gewünschten Text.

Jayank Chopra
quelle
Sie sollten keine Core-Dateien bearbeiten!
Black
-1

Sie müssen die folgenden 2 Dateien bearbeiten.

app/design/frontend/default/default/layout/checkout.xml

app/design/frontend/default/default/layout/customer.xml

In diesen Dateien werden die Links hinzugefügt name="top.links". Kommentieren Sie sie einfach aus.

Henry Roger
quelle
2
Willkommen bei Magento SE. Während diese Antwort funktioniert, ging es explizit um Best Practices, und das Bearbeiten von Kerndateien ist alles andere als Best Practice in Magento.
Fabian Schmengler