2013-10-21 4 views
50

aus der folgenden Zeile in 2columns-right.phtmlgetChildHtml in Magento

<div class="col-main"> 
    <?php echo $this->getChildHtml('global_messages') ?> 
    <?php echo $this->getChildHtml('content') ?> 
</div> 

Ich bin nicht in der Lage zu verstehen, das zu verstehen, aus denen der Inhalt von <?php echo $this->getChildHtml('content') ?> kommt.

Hexe .phtml Datei heißt von <?php echo $this->getChildHtml('content') ?>

+0

Das kann Ihnen niemand aus diesen 2 Zeilen Code sagen. Sicherlich kommt es aus dem hier nicht dargestellten PHP-Code, aber in der Seite –

+26

enthalten ist Hanky ​​- jemand, der mit Magento vertraut ist. – Choinek

+2

getChildHtml() gibt nur den gerenderten HTML-Code von JEDEM Kind des aktuellen Blocks zurück. – MagikVishal

Antwort

135

die Daten anzuzeigen Wenn wir das Frontend der Website besprechen, die bestimmte Zeile, die Sie gefragt haben ....

<?php echo $this->getChildHtml('content') ?> 

wird dem Magento-Layout-XML in der Datei app/design/frontend/base/default/layout/page.xml hinzugefügt. In Magento Version 1.8 finden Sie es in den Zeilen 92-94 definiert.

<block type="core/text_list" name="content" as="content" translate="label"> 
    <label>Main Content Area</label> 
</block> 

Durch das Attribut "type" dieses Block-Tags können wir wissen, welche Objektklasse dieser Abschnitt des Layouts ist. Es kommt vom Modul "Core" und ist vom Blocktyp Text List. Der Klassenname für diese Mage_Core_Block_Text_List. (App/Code/Kern/Mage/Core/Block/Text/List.php). Textlisten sind einfach Blockcontainer, die dazu dienen, zusätzliche Kindblöcke in ihnen zu speichern. Sie können der Textliste eine beliebige Anzahl untergeordneter Blöcke hinzufügen und sie werden entweder in der Reihenfolge, in der sie hinzugefügt wurden, oder in der Reihenfolge, in der sie zugewiesen wurden, ausgegeben.

Also, um Ihre Frage zu beantworten, gibt es kein Ansichtsskript (.phtml-Datei), das den Inhalt von $ this-> getChildHtml ('Inhalt') rendert. Die Blöcke, die zu diesem Block hinzugefügt wurden, können selbst View-Skripten zugeordnet haben. Um herauszufinden, welche View-Skripte das sind, müssen Sie das Layout-XML finden, das den Block hinzugefügt hat.

Zum Beispiel, wenn ich hinzugefügt die folgende Layout-Datei musste Frontend Thema meiner Website:

<?xml version="1.0"?> 
<layout> 
    <default> 
     <reference name="content"> 
      <block type="core/template" name="my_view_script" template="hello/world.phtml" /> 
     </reference> 
    </default> 
</layout> 

Der obige Code würde den Block mit einer Objektklasse von Mage_Core_Block_Template mit dem Namen auf den Block hinzufügen "content" (was zufällig der ist, nach dem du gefragt hast). Magento wird dann für den View Skript an in den folgenden Orten, in dieser Reihenfolge:

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml 
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml 
app/design/frontend/base/default/template/hello/world.phtml 

erste, das gefunden wird, ist das man es verwenden wird. Wenn kein Ansichtsskript gefunden wird, protokolliert Magento einen Fehler in var/logs/system.log (Standardeinstellung der Protokolldatei), dass das Ansichtsskript nicht gefunden wurde. Keine Ausgabe von dem Block wird auftreten.

Beachten Sie, dass abhängig von Ihren Einstellungen in System -> Konfiguration -> (Allgemein) Design weitere package/theme Orte, in denen Magento nachsehen wird. Es gibt auch andere Szenarien, wenn das Feld "Custom Theme" geändert wird Für einzelne CMS-Seiten, Katalogkategorien oder Katalogprodukte kann die Ansichtsseite dieses individuellen Modells einen zusätzlichen View-Script-Speicherort haben (der mit dem ausgewählten Design übereinstimmt), der Vorrang vor den Standardeinstellungen Ihrer Site hat.

Magento wird bei der Suche nach Übersetzungsdateien und Layout-XML-Dateien derselben Fallback-Logik folgen.

Bitte beachten Sie, dass es vollkommen akzeptabel ist, einzelne Ansichtsskripte zu kopieren (vermeiden Sie das Kopieren ganzer Verzeichnisse, kopieren Sie nur Ansichtsskripts, die Sie eigentlich ändern möchten) von app/design/frontend/base/default/template/ zu Ihrem lokalen Thema und passen Sie sie für die Zwecke Ihrer Website an Thema. Um jedoch eine upgrade-kompatible Website zu haben, sollten Layout-Dateien nicht von der Basis zu Ihrem lokalen Thema kopiert werden. Dies entspricht nicht den Upgrade-kompatiblen Vorgehensweisen. Stattdessen sollten XML-Layoutupdates für Ihr Design in app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml enthalten sein. Es gibt keine Layout-Anweisungen von app/design/frontend/base/default/layout/*, die nicht entfernt/hinzugefügt/geändert werden können, was Sie haben, mit den richtigen XML-Anweisungen in local.xml.

+3

Diese – Metropolis

+1

akzeptiert werden sollte Was für eine großartige Erklärung. Anfänger würden es lieben :) – Chiragit007

+1

Was bedeutet es, wenn kein Argument bestanden? dh getChildHtml()?> – Butterfly