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  content,  left,  right 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.