Hinzufügen eines Inhaltsblocks zur Startseite, Entfernen von 'std' <div>

9

Ich möchte ein paar Dinge tun, und ich bin neu und sehr weit davon entfernt, Magento zu beherrschen. Was ich verlange, ist der beste und prägnanteste Weg, um Folgendes zu tun:

  1. Ich möchte den Inhalt meiner Homepage - und wahrscheinlich jeder anderen CMS-Seite, wenn ich in diesem Projekt weiter komme - in meinem Texteditor und nicht im Admin-Bereich WYSIWYG bearbeiten. Ich denke, ich hätte nur eine Vorlage, home-content.phtmldie mein Markup für meine Karussells enthält und was auch immer ich sonst auf meiner Homepage platziere. Es schien mir der logischste Weg, dies zu tun, meine Methode home-content.phtmlan die getChildHtml('content')Methode im Admin-Bereich anzuhängen -> CMS -> Seiten -> Startseite -> Registerkarte 'Design' -> XML-Layout aktualisieren mit Code wie folgt:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>
    

    Das wurde jedoch durch das nächste, was ich tun wollte, durcheinander gebracht ...

  2. Meiner Meinung nach ist die Standard-Magento-HTML-Struktur schrecklich aufgebläht, mit zu vielen verschachtelten div( Wrapper -> Seite -> Hauptcontainer col1-Layout -> Haupt -> Spalte-Haupt, nur um zum Inhalt einer Seite zu gelangen). . Es macht das Styling mit Sass für mich zu einem Albtraum, da all diese Stile in 5 verschiedene Sass-Partials aufgeteilt sind. Daher bereinige ich die Standardstruktur so, dass sie meinen eigenen Konstruktionsprinzipien entspricht. Ein Teil davon bedeutet, leere Elemente wie die berüchtigten zu entfernen <div class="std"> </div>. Der effektivste Weg, dies zu beseitigen (da ich nicht vorhabe, das Admin-Panel für Inhalte zu verwenden), ist <remove name="cms.wrapper">das CMS Home Layout Update XML. Das Problem ist, dass dadurch alles entfernt wird, was ich mit der obigen Methode ( reference name="content") hinzufüge .

Grundsätzlich gilt: Wie kann ich meiner Homepage mit a Inhalte hinzufügen .phtml und diese<div class="std"> </div> konfliktfrei entfernen ? Ich verstehe nicht, wie sich die Funktionalität von admin -> CMS -> Layout Update XML von der Funktionalität von layout.xml unterscheidet oder warum ich eine über die andere verwenden sollte (wie könnte ich nicht <cms index-index>das Gleiche tun?). .

Vielen Dank im Voraus an alle.

Ezratisch
quelle
In meinem Fall werden .stdListenstile hinzugefügt, bei denen sie nicht erwünscht sind. Mit Magento ist dies vorhersehbar ein langwieriger Vorgang.
Rybo111

Antworten:

12

Lassen Sie uns Ihr Problem in drei Abschnitte unterteilen und überprüfen.

1. Sie müssen Ihrer CMS-Seite eine Vorlagendatei hinzufügen

Die Methode, die Sie hier anwenden, wird mit Sicherheit funktionieren. Das heißt, Sie müssen dieses Code-Snippet auf Ihrer CMS-Seite unter der Registerkarte "Design" hinzufügen

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

Da Ihre Vorlagendatei direkt contentblockiert wird, wird Ihr Vorlageninhalt von Magento gerendert. Sie müssen also keine asEigenschaft in Ihrem verwenden core/template block.

2. Wie vermeide ich? <div class="std"></div>

Dieses div ist eigentlich ein Wrapper-div-Element für CMS-Seiten. Siehe die Definition dieses Blocks hier.

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

Wie Sie sehen können, cms.wrapperist der Block vom Typ page/html_wrapper. Dieser Block umschließt den gesamten untergeordneten Block mit einem div-Element (Standardelement) und rendert die untergeordneten Blöcke automatisch.

Um diesen Block zu vermeiden, haben Sie diesen Code verwendet

<remove name="cms.wrapper">

Es ist jedoch völlig falsch. Es entfernt tatsächlich das Wrapper-Div. Gleichzeitig wird aber auch der untergeordnete Block entfernt cms_page. Dies cms_pageist mit einem Typ cms/page. Das heißt, es bezieht sich auf den Block Mage_Cms_Block_Page. Dieser Block ist das "Herz" von CMS-Seiten. Durch das Entfernen des Wrappers wurde auch der Herzblock von CMS Page gelöscht. Aus diesem Grund haben Sie auf Ihrer CMS-Seite keine Ausgabe erhalten.

Was sollten Sie also tun, um diesen Wrapper zu vermeiden? Die Antwort ist ziemlich einfach. Entfliehen Sie cms_pageder Verpackung und entfernen Sie die Verpackung sicher. Hier ist der Code, den Sie in Ihrem Abschnitt zum Layout der CMS-Seite verwenden müssen.

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

Wie Sie im XML-Code des Layouts sehen können, entfernen wir zuerst den Wrapper und fügen daher einen cms_pageBlock durch unseren Code ein. Wie Sie sehen, haben wir auch unseren Vorlagenblock verwendet. Dadurch wird der Inhalt der Vorlagendatei zuerst auf Ihrer Seite gerendert, gefolgt vom Inhalt der CMS-Seite.

3. Wie sich admin -> CMS -> Layout Update XML von der Funktionalität von layout.xml unterscheidet

Angenommen, Sie möchten ein spezielles Erscheinungsbild für eine der CMS-Seiten, die Sie auf Ihrer Website haben. Die beste Methode, die Sie wählen können, ist das Hinzufügen einer Layoutaktualisierung über admin-> CMS-> Layout. Dies gilt nur für die CMS-Seite.

Wenn Sie jedoch einige allgemeine Änderungen an allen CMS-Seiten vornehmen müssen, ist dies problemlos möglich layout.xml.

Welche Methode zum Ändern des Layouts angewendet werden sollte, hängt im Allgemeinen davon ab, was Sie erreichen möchten. Abhängig davon müssen Sie mit einer Methode gehen. Nicht alle Methoden.

Ich hoffe, das hilft

Rajeev K Tomy
quelle
3

Wenn es nur eine beleidigende Seite gibt, dann der beste und einfachste Weg IMO:

Bearbeiten Sie die "Design"Registerkarte der CMS-Seite .

Verweisen Sie auf das Wrapper-Element und setElementClasswenden Sie mit der Methode entweder keine Klasse oder eine neue Klasse an.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
MES
quelle
0

Sie sollten das Layout ändern, normalerweise 1column.phtml, 2columns.phtml usw., und sie so gestalten, wie Sie es möchten / brauchen.

Diese PHTMLs sind die Grundstruktur jedes Layouts und werden programmgesteuert mit XML-Updates gefüllt.

Dies wirkt sich auf nichts anderes aus, wenn Sie die Konsistenz zwischen Ihren Vorlagen und Layouts in Ihrem eigenen Thema beibehalten.

mbalparda
quelle
Wie wäre es, eine Bedingung if this is the home page, include this code ...auf allen Layoutseiten hinzuzufügen und dann nur die getCHildHtml('content')auf allen Seiten zu löschen ? Ich möchte lernen, wie man Magento und seine Tools besser einsetzt, nicht nur das Problem mit dem Vorschlaghammer.
Ezratic
Nein, Layouts werden auf der gesamten Website unter verschiedenen Umständen und mit unterschiedlichen Aktualisierungen je nach Route verwendet. Stellen Sie jeweils eine Frage, wenn Sie weitere Zweifel haben, stellen Sie weitere Fragen, bearbeiten Sie diese jedoch nicht, da sie sonst möglicherweise geschlossen wird.
Mbalparda
Ich versuche hier nicht unhöflich zu sein; Ich weiß es zu schätzen, dass Sie sich die Zeit genommen haben, mir zu antworten. Ich glaube jedoch nicht, dass Ihre Antwort mir hilft. Ich versuche, ein Element zu entfernen und einer einzelnen CMS-Seite einen Block hinzuzufügen, aber meine Methode funktioniert nicht. Deshalb frage ich nach einer, die funktioniert. Ich bin mir des allgemeinen Zwecks von Layouts und Vorlagen bewusst, und Ihr "Verwenden Sie die Dinge richtig und es wird funktionieren" beantwortet meine Frage nicht.
Ezratic
Sie verwechseln diese Seite mit "Machen Sie andere Leute kostenlos". Die Antwort ist gültig und wahrscheinlich die, nach der Sie suchen. Sobald Sie wissen, wie die Dinge in Magento funktionieren, werden Sie feststellen, dass diese Antwort in diesem Fall der richtige Weg ist.
Mbalparda
Lesen Sie dies und Sie werden das meiste finden, was Sie brauchen: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Ich habe eine Minute gebraucht, um alle Anweisungen in der akzeptierten Antwort zu verstehen. Um darauf zurückzugreifen, war dies alles, was erforderlich war, um den Wrapper für alle CMS-Seiten zu entfernen: <div class="std"></div>

Ändern Sie in cms.xml den Block cms_page in:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
Justin
quelle