Grundlegendes zu Magento-Block und Blocktyp


105

Ich möchte nur die Bedeutung von verstehen

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

Ich habe viele Referenzen von Google erhalten und viele Dinge darüber verstanden, aber ich kann immer noch nicht verstehen, type="page/html"wie ein Typ für mein benutzerdefiniertes Modul gebildet wird.

Bitte erkläre

type="A/B"

Lassen Sie mich wissen, woher diese A und B kommen?

Antworten:


126

Das Aist der Alias eines Moduls . In diesem Fall pageist die Abkürzung für Mage_Page_Block(sie ist definiert in, app/code/core/Mage/Page/etc/config.xmlwenn Sie sehen möchten).

Dies Bist der Klassenname relativ zum Alias. Die Anfangsbuchstaben jedes Wortes werden groß geschrieben. In diesem Fall htmlwird Htmlund wird an den aufgelösten Alias ​​angehängt, so ist es Mage_Page_Block_Html. Dies ist wahrscheinlich in der Datei enthalten, app/code/core/Mage/Page/Block/Html.phpda Klassennamen direkt in Speicherorte in Magento übersetzt werden.

Wenn Sie einen Modellalias anstelle eines Blockalias verwenden pagewürden, wäre dies Mage_Page_Modelstattdessen der Fall . Das Gleiche gilt auch für Ressourcenmodelle und Helfer. Ihr eigenes Modul muss diese in seiner Konfiguration definieren, wenn es Blöcke, Modelle und Helfer haben soll.


@ clockworkgeek vielen Dank. Ihre Antwort ist sehr hilfreich für mich.
Anup_Tripathi

Du hast mir eine Tonne gespart. Vielen Dank.
Sumit Malik

Schöne Erklärung
Jalpesh Patel

Was ist, wenn es sich um einen umgeschriebenen / überschriebenen Block handelt? Wie kann ich dann den Blocktyp definieren und verwenden?
Vicky Dev

@ VickyDev Sie müssen nichts anderes tun, da der neue Block ein Nachkomme des alten Blocks ist und daher kompatibel ist. Sie können und sollten so tun, als ob es nicht einmal existiert.
Uhrwerk

158

Um mehr über Magento-Blocktypen zu erfahren, werden im Folgenden einige integrierte Blocktypen aufgeführt, die im Layout häufig verwendet werden.

  1. core/template: Dieser Block rendert eine Vorlage, die durch ihr template Attribut definiert ist  . Die meisten im Layout definierten Blöcke sind vom Typ oder Subtyp von  core/template.
  2. page/html: Dies ist ein Subtyp von  core/template und definiert den Root-Block. Alle anderen Blöcke sind untergeordnete Blöcke dieses Blocks.
  3. page/html_head: Definiert den HTML-Kopfabschnitt der Seite, der Elemente zum Einschließen von JavaScript, CSS usw. enthält.
  4. page/html_header: Definiert den Kopfteil der Seite, der das Site-Logo, Top-Links usw. enthält.
  5. page/template_links: Mit diesem Block wird eine Liste von Links erstellt. In der Fußzeile und im Kopfbereich sichtbare Links verwenden diesen Blocktyp.
  6. core/text_list: Einige Blöcke wie  contentleftright usw. sind vom Typ  core/text_list. Wenn diese Blöcke gerendert werden, werden alle untergeordneten Blöcke automatisch gerendert, ohne dass die getChildHtml() Methode aufgerufen werden muss.
  7. page/html_wrapper: Mit diesem Block wird ein Wrapper-Block erstellt, der seine untergeordneten Blöcke in einem von der Aktion festgelegten HTML-Tag rendert  setHtmlTagName. Das Standard-Tag ist,  <div> wenn kein Element festgelegt ist.
  8. page/html_breadcrumbs: Dieser Block definiert Breadcrumbs auf der Seite.
  9. page/html_footer: Definiert den Fußzeilenbereich der Seite, der Fußzeilenlinks, Copyright-Meldungen usw. enthält.
  10. core/messages: Dieser Block rendert Fehler- / Erfolgs- / Benachrichtigungsmeldungen.
  11. page/switch: Dieser Block kann für den Sprach- oder Speicherumschalter verwendet werden.

Dies ist eine Liste nur häufig verwendeter Blocktypen. Es gibt viele andere Blocktypen, die in erweiterten Theme-Implementierungen verwendet werden.


Was ist mit: {{block type = "cms / block" block_id = "Terms"}}
daslicht

5
@daslicht Bereits in der Antwort erwähnt, dass: Dies ist eine Liste von nur häufig verwendeten Blocktypen. Es gibt viele andere Blocktypen, die in erweiterten Theme-Implementierungen verwendet werden.
Kamesh Jungi

Vielen Dank. War sehr hilfreich.
Arqam

8
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

Seite ist ein Frontend- etc/config.xmlName, der in der Datei definiert ist. HTML ist ein Blockklassenname

mehr Details:

In dieser Zeile type(type="page/html")definieren Sie den Blockklassennamen, der sich auf Ihren bezieht, template(template="example/view.phtml">)und der Name ist für jeden Block eindeutig.

siehe zuerst Ordnerstruktur

app> local> Namespace> Modulname> etc> config.xml

legen wir fest FrontendName = 'mymodule'

app> local> namespace> modulename> Block > hello.php

In hello.php haben Sie eine Funktion erstellt

   class namespace_modulename_Block_Data extends Mage_Core_Block_Template
   {
    public function mydata()
        {
            $data = "Block is called";
            return $data;
         }     
}   

und jetzt kommen Sie zu Ihrer Layout-XML-Seite:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> hier ist mydata frontend name

und jetzt kommen Sie zu Ihrer Vorlage

Seite template / example / view.phtml

Hier können Sie direkt die Funktion mydata () aufrufen

mögen

<div>
<?php echo $this->mydata(); ?>
</div>

Jetzt können Sie Ihre Ausgabe im Browser "Block heißt" erhalten.


Sie haben den Block hello.php benannt, aber der Name der Blockklasse lautet 'namespace_modulename_Block_Data'. Sollte es nicht Hallo am Ende des Namens sein?
Rai Ehtisham

5

Ich weiß nicht über den Typ "B", aber "A" bezieht sich auf Ihr Modul-Namensschild im Beispiel config.xml in config.xml:

<A><!-- script --></A>

Nein, du liegst nicht falsch. Aber das "<!-- script -->"kann verwirrend sein. Lassen Sie uns klarstellen: Wie in den obigen Antworten angegeben, handelt es sich um einen Alias, der aus zwei Teilen bestand. Der erste Teil ("A") selbst ist der Alias, den Sie für die Klassen Ihres Moduls in den Modulen Ihres Moduls definieren. Der config.xmlzweite Teil ist ein Pfad relativ zum Knotenwert. Diese zusammen ("A" + großgeschriebenes "B") werden in einen Klassennamen übersetzt, wobei der erste Teil (der Wert des "A" -Knotens) genau so verwendet wird, wie Sie ihn definieren (achten Sie auf Groß- / Kleinbuchstaben, wenn Sie keine Stunden möchten des Leidens) und der zweite Teil wird nach jedem Unterstrich großgeschrieben. Beginnen Sie also mit dem A / B-Beispiel mit einem Block und dieser Konfiguration:

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>

Zur Laufzeit A/Bwürde durch die Magento-Konfiguration aufgelöst, Vendor_Module_Block_Bdie dann vom Autoload aus folgendem Pfad aufgenommen würde : public/app/local/Vendor/Module/Block/B.php. Um ein besseres Verständnis Ich rate bekommen Sie einen Blick auf die nehmen Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()und Varien_Autoload::autoload().


3

Ich weiß nichts über den Typ "B", aber "A" bezieht sich auf Ihr Modul-Namensschild in der Datei config.xml

Ein Beispiel in der Datei config.xml:

<A><!-- script --></A>

nb: ich hoffe ich liege nicht falsch ..

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.