Comprensione del blocco Magento e del tipo di blocco


105

Voglio solo capire il significato di

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

Ho ricevuto molti riferimenti da Google e ho capito molte cose al riguardo, ma non sono ancora in grado di capire la formazione di type="page/html"come formare un tipo per il mio modulo personalizzato.

Spiega per favore

type="A/B"

Fammi sapere da dove vengono questi A e B?

Risposte:


126

È Al' alias di un modulo . In questo caso pageè l'abbreviazione di Mage_Page_Block(è definito in app/code/core/Mage/Page/etc/config.xmlse vuoi vedere).

Il Bè il nome della classe relativo all'alias, le lettere iniziali di ogni parola sono in maiuscolo. In questo caso htmldiventa Htmle viene aggiunto all'alias risolto, quindi è Mage_Page_Block_Html. Questo si trova probabilmente nel file app/code/core/Mage/Page/Block/Html.phpperché i nomi delle classi si traducono direttamente nelle posizioni in Magento.

Se stavi usando un alias del modello invece di un alias di blocco, allora pagesarebbe Mage_Page_Model. La stessa cosa accade anche per i modelli di risorse e gli helper. Il tuo modulo dovrà definirli nella sua configurazione se deve avere blocchi, modelli e helper.


@ clockworkgeek grazie mille. la tua risposta è molto utile per me.
Anup_Tripathi

Mi hai salvato un sacco. Grazie.
Sumit Malik

Nice Explaination
Patel

E se si tratta di un blocco riscritto / sovrascritto, come posso definire e utilizzare il tipo di blocco allora?
Vicky Dev

@VickyDev non devi fare nulla di diverso in quanto il nuovo blocco sarà un discendente del vecchio blocco e quindi è compatibile. Puoi e dovresti fingere che non esista nemmeno.
clockworkgeek

158

Per capire di più sui tipi di blocchi magento, di seguito sono riportati alcuni tipi di blocchi incorporati ampiamente utilizzati nel layout.

  1. core/template: Questo blocco esegue il rendering di un modello definito dal suo  template attributo. La maggior parte dei blocchi definiti nel layout sono di tipo o sottotipo di  core/template.
  2. page/html: Questo è un sottotipo di  core/template e definisce il blocco radice. Tutti gli altri blocchi sono blocchi figlio di questo blocco.
  3. page/html_head: Definisce la sezione di intestazione HTML della pagina che contiene elementi per includere JavaScript, CSS ecc.
  4. page/html_header: Definisce la parte dell'intestazione della pagina che contiene il logo del sito, i collegamenti superiori, ecc.
  5. page/template_links: Questo blocco viene utilizzato per creare un elenco di collegamenti. I collegamenti visibili nell'area del piè di pagina e dell'intestazione utilizzano questo tipo di blocco.
  6. core/text_list: Alcuni blocchi come  contentleftright ecc, sono di tipo  core/text_list. Quando questi blocchi vengono renderizzati, tutti i loro blocchi figli vengono renderizzati automaticamente senza la necessità di chiamare il getChildHtml() metodo.
  7. page/html_wrapper: Questo blocco viene utilizzato per creare un blocco wrapper che rende i suoi blocchi figli all'interno di un tag HTML impostato dall'azione  setHtmlTagName. Il tag predefinito è  <div> se non è impostato alcun elemento.
  8. page/html_breadcrumbs: Questo blocco definisce i breadcrumb sulla pagina.
  9. page/html_footer: Definisce l'area del piè di pagina della pagina che contiene collegamenti a piè di pagina, messaggio di copyright ecc.
  10. core/messages: Questo blocco restituisce messaggi di errore / successo / avviso.
  11. page/switch: Questo blocco può essere utilizzato per la lingua o per il selettore del negozio.

Questo è un elenco dei soli tipi di blocco comunemente usati. Esistono molti altri tipi di blocchi utilizzati nelle implementazioni di temi avanzati.


Che dire: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Già menzionato nella risposta che: Questo è un elenco di soli tipi di blocchi comunemente usati. Esistono molti altri tipi di blocchi utilizzati nelle implementazioni di temi avanzati.
Kamesh Jungi

Grazie. È stato davvero utile.
arqam

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

page è un FrontendName definito nel etc/config.xmlfile html è un nome di classe di blocco

più dettagli:

in questa riga type(type="page/html")definisci il nome della classe di blocco correlato al tuo template(template="example/view.phtml">)e il nome è l'unico per ogni blocco.

vedere prima la struttura delle cartelle

app> locale> namespace> nomemodulo> ecc> config.xml

prepariamo FrontendName = 'mymodule'

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

in hello.php hai creato una funzione

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

e ora vieni alla tua pagina xml di layout:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> qui mydata è il nome del frontend

e ora vieni al tuo modello

pagina template / esempio / view.phtml

qui puoi chiamare direttamente la funzione mydata ()

piace

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

ora puoi ottenere il tuo output nel browser "Block is called"


Hai chiamato il blocco hello.php ma il nome della classe del blocco è 'namespace_modulename_Block_Data', non dovrebbe essere Hello alla fine del nome?
Rai Ehtisham

5

non conosco il tipo "B", ma "A" si riferisce al tag del nome del modulo nell'esempio config.xml in config.xml:

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

No, non ti sbagli. Ma "<!-- script -->"potrebbe creare confusione. Chiariamo: come hanno affermato le risposte precedenti, questo è un alias, che consisteva di due parti, la prima parte ("A") stessa è l'alias che definisci per le classi del tuo modulo in quelle del tuo modulo config.xml, la seconda è un percorso relativo al valore del nodo. Questi insieme ("A" + "B" maiuscola) saranno tradotti in un nome di classe, usando la prima parte (il valore del nodo "A") esattamente come lo definisci (guarda per maiuscolo / minuscolo se non vuoi ore di sofferenza) e la seconda parte è in maiuscolo dopo ogni trattino basso. Quindi, inizia con l'esempio A / B con un blocco e questa configurazione:

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

In fase di esecuzione A/Bsarebbe risolta dal config Magento per Vendor_Module_Block_Bil quale avrebbe poi inserito dal caricamento automatico dal seguente percorso: public/app/local/Vendor/Module/Block/B.php. Per una migliore comprensione ti consiglio di dare un'occhiata a Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()e Varien_Autoload::autoload().


3

Non conosco il tipo "B", ma "A" si riferisce al tag del nome del modulo in config.xml

Un esempio nel file config.xml:

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

nb: spero di non sbagliarmi ..

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.