Magento - Bewegen Sie den Block von rechts nach links

7

Nicht sicher, warum das so schwierig ist. Wenn ich DIESE richtig verstehe, sollte ich in der Lage sein, schnell meine Ziele zu erreichen ... Aber keine Freude.

Also - ich baue mein erstes Thema, und immer noch meinen Kopf um Layout ...

Ich arbeite speziell an der Seite Catalog Product View und wandle diese Seite von einem rechten Spaltenlayout in ein linkes Spaltenlayout um. Ich möchte einfach die Blöcke von rechts nach links bewegen.

In der Standard-catalog.xml ist product_list_related definiert:

%Vor%

In meiner local.xml versuche ich einfach, diesen Block zu verschieben:

%Vor%

Wie bereits erwähnt funktioniert das Einfügen von catalog.leftnav wie erwartet, also nehme ich an, dass alles andere korrekt eingerichtet ist. Der Zielblock rendert wie erwartet, wenn ich die Vorlage und andere Direktiven unverändert belasse, was mir sagt, dass der Block rendern sollte, sobald er richtig entschärft und eingefügt wurde ...

Das macht mich verrückt ... aber was ist noch neu bei Magento?

Prost -

b [] x

%Vor%

Weil ich einfach nicht local.xml override zum Arbeiten bekommen kann, falle ich einfach auf eine modifizierte catalog.xml zurück. Ich bin ein ziemlich kluger Typ ... es beunruhigt mich, dass ich das nicht zur Arbeit bringen kann (und Magento stört einfach, egal, was auch immer der Fall ist) - aber ich kann keine Zeit mehr damit verschwenden, mit diesem dummen Thema herumzuhängen.

Weitermachen.

%Vor%

Habe jetzt einige Zeit damit verbracht, in Magento zu arbeiten und mich mit seinen Komplexitäten vertrauter zu machen. Ich bin heute auf dieses Problem zurückgekommen, da ich meine local.xml richtig einsetzen muss.

Ich weiß wirklich nicht, was ich falsch gemacht habe, aber diese Reihe von Richtlinien hat schließlich funktioniert.

%Vor%

Ein wichtiger Punkt, den ich für andere, die sich damit beschäftigen, notieren werde:

Layout-XML-Anweisungen rufen verfügbare Methoden in Magento-Klassen auf. In diesem Fall ist der Block Page.xmls "Left" vom Typ Mage_Core_Block_Text , der von Mage_Core_Block_Abstract erbt, der die Methoden unsetChild und insert enthält.

von Mage_Core_Block_Abstract :

%Vor%

und

%Vor%

Lokale xml-Parameter sind dann wichtig, nicht im Namen (spezifisch), sondern in der Reihenfolge:

%Vor%

Letztendlich macht local.xml eine wirklich mächtige Methode, um das System zu manipulieren, aber wenn Sie damit und mit dem Magento-System nicht vertraut sind, machen Sie sich wochen- oder monatelang mit der Arbeit fertig, um sich wirklich damit abzufinden.

>

Prost

Noch ein Update

Ich bin jetzt mehrmals auf das Problem gestoßen, wo ein Block, den ich verschieben möchte, entfernt wurde. Dies ist ein Problem, da jeder Block, der aus dem Layout entfernt wurde, für immer mit einem Atomkern versehen wird.

Mit Alan Storms sehr praktischem Unremove-Plugin können Sie jedoch die vorgenommenen Änderungen rückgängig machen:

%Vor%

Er verwaltet dieses Kunststück, indem er das Layoutobjekt betrachtet und eine Liste entfernter Blöcke erstellt, auf die später verwiesen werden kann.

Nett!

    
Bosworth99 15.03.2012, 19:29
quelle

7 Antworten

19

Dies ist jetzt ein staubiger Thread, aber für die Aufzeichnung, das ist die letzte Antwort, mit der ich ging.

%Vor%

Magento empfiehlt, dies in Ihre local.xml aufzunehmen, und es hat sich als effektive Technik erwiesen.

    
Bosworth99 22.08.2012, 16:08
quelle
2

Ein alternativer Ansatz besteht darin, den "rechten" Block in "links" umzubenennen, anstatt Blöcke von rechts nach links zu bewegen. Dies wird jedoch nicht funktionieren, wenn der "richtige" Block an erster Stelle entfernt wird, wie ich vorgeschlagen habe, könnte der Fall in meiner anderen Antwort der Fall sein.

%Vor%     
ColinM 15.03.2012 22:43
quelle
2

Wenn Sie nur suchen, um die Ausgabe von 2col-right auf 2col-left zu ändern, wäre es viel einfacher gewesen, einfach

zu ändern %Vor%

bis

%Vor%

Es besteht keine Notwendigkeit, Kinder zu deaktivieren oder einzufügen oder etwas neu zu deklarieren. Sie verkomplizieren Dinge und duplizieren unnötigen Code.

Wenn Sie auch Ihr eigenes Design erstellen, würde ich vorschlagen, das gesamte ./app/design/frontend/base -Verzeichnis nach ./app/design/frontend/mypackage zu kopieren - arbeiten Sie dann mit dem Verzeichnis mypackage/default , um Ihre Website neu zu erstellen. Es ist sauberer und einfacher. Andere mögen die möglichen Probleme der Upgrade-Fähigkeit kommentieren, wenn Sie jede -Datei kopieren (und nicht nur die, die Sie ändern wollen), aber es ist bei weitem eine bessere Methode und viel weniger anfällig für Fehler. Schwierigkeiten und allgemeine Wartung.

Bearbeiten: Um dies detaillierter zu verfolgen, werfen Sie einen Blick auf Ссылка

    
Ben Lessani - Sonassi 15.03.2012 20:00
quelle
1

Der "richtige" Block wird wahrscheinlich mit einem <remove name="right" /> an irgendeinem Punkt im Layout entfernt. Wenn dies der Fall ist, wird der "catalog.product.related" -Block niemals dem Layout hinzugefügt, so dass kein Block in den "linken" Block eingefügt werden muss.

Ich bin mir ziemlich sicher, dass dies das Problem ist, aber um das zu bestätigen, fügen Sie ein Mage :: log hinzu ("Removed $ blockName"); in Mage_Core_Model_Layout- & gt; generateXml () in der for-Schleife und überprüfen Sie das Protokoll nach dem Laden der Seite.

Wenn ich Recht habe, kopiere einfach <block..> in deine local.xml und entferne die Aktionen "unsetChild" und "insert".

    
ColinM 15.03.2012 22:23
quelle
1

Ich würde es so machen: In Ihrer local.xml unter z.B.

%Vor%

Sie entfernen die Blöcke, z. B .:

%Vor%

und dann fügen Sie die Blöcke in

hinzu %Vor%     
Socrates 03.05.2012 15:49
quelle
0

Das Kopieren von base / default auf ein lokales Thema ist eine schreckliche Idee. Jedes Update auf eine Hauptdesign-Datei bei einem Magento-Versions-Upgrade führt zu der gleichen Sicherheitsanfälligkeit wie das Ändern von App- / Code- / Core-Dateien - Sie müssen die Dateien auf Upgrades verteilen.

Ihr richtiges Vorgehen ist das Ändern einer einzelnen local.xml mit Ihren Zusätzen oder Außerkraftsetzungen. Wenn das nicht ausreicht, verwenden Sie die richtige Syntax, um ein Modul in app / code / community mit Ihren Layoutdefinitionen und benutzerdefinierten XML-Layoutdateien zu erstellen.

    
Mark Shust 15.03.2012 21:47
quelle
0

Ich denke, dass die beste Antwort, um Magento-Layouts zu modifizieren, auf Classyllama.com

angegeben ist

Ссылка

  

Wenn Sie das remove-Tag verwenden, werden alle Blöcke mit dem angegebenen Namen unabhängig vom Kontext aus dem gesamten Layout entfernt. Also, wenn ich right.newsletter in dem Kontext entferne und dieser Name in dem Kontext verwendet wird, dann werden beide Blöcke entfernt. Da remove im globalen Kontext ausgeführt wird, können Sie ein Element nur einmal entfernen. Da in catalogsearch.xml aufgerufen wird, müssen wir es aufheben, sonst erhalten wir einen Fehler.

%Vor%     
hans2103 08.05.2012 20:51
quelle

Tags und Links