Comprensión del bloque y el tipo de bloque de Magento

105

Solo quiero entender el significado de

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

Obtuve muchas referencias de Google y entendí muchas cosas al respecto, pero todavía no puedo comprender la formación de type="page/html"cómo formar un tipo para mi módulo personalizado.

Por favor explique

type="A/B"

Déjame saber de dónde vienen este A y B

Anup_Tripathi
fuente

Respuestas:

126

El Aes de un módulo de alias . En este caso pagees la abreviatura de Mage_Page_Block(se define en app/code/core/Mage/Page/etc/config.xmlsi quieres ver).

El Bes el nombre de la clase relativo al alias, las letras iniciales de cada palabra están en mayúscula. En este caso se htmlconvierte en Htmly se agrega al alias resuelto, por lo que es Mage_Page_Block_Html. Probablemente se encuentre en el archivo app/code/core/Mage/Page/Block/Html.phpporque los nombres de las clases se traducen directamente a ubicaciones en Magento.

Si usaba un alias de modelo en lugar de un alias de bloque, entonces pagelo sería Mage_Page_Model. Lo mismo ocurre con los modelos de recursos y los ayudantes. Su propio módulo deberá definirlos en su configuración si va a tener bloques, modelos y ayudantes.

clockworkgeek
fuente
@ clockworkgeek muchas gracias. tu respuesta es muy útil para mí.
Anup_Tripathi
Me salvaste una tonelada. Gracias.
Sumit Malik
Buena explicación
Jalpesh Patel
¿Qué pasa si es un bloque reescrito / anulado, cómo puedo definir y usar el tipo de bloque entonces?
Vicky Dev
@VickyDev, no necesitas hacer nada diferente ya que el nuevo bloque será un descendiente del antiguo y, por lo tanto, es compatible. Puedes, y debes, fingir que ni siquiera existe.
clockworkgeek
158

Para comprender más sobre los tipos de bloques de magento, a continuación se muestran algunos tipos de bloques incorporados que se utilizan ampliamente en el diseño.

  1. core/template: Este bloque representa una plantilla definida por su  template atributo. La mayoría de bloques definidos en el diseño son del tipo o subtipo de  core/template.
  2. page/html: Este es un subtipo  core/template y define el bloque raíz. Todos los demás bloques son bloques secundarios de este bloque.
  3. page/html_head: Define la sección de encabezado HTML de la página que contiene elementos para incluir JavaScript, CSS, etc.
  4. page/html_header: Define la parte del encabezado de la página que contiene el logotipo del sitio, los enlaces superiores, etc.
  5. page/template_links: Este bloque se utiliza para crear una lista de enlaces. Los enlaces visibles en el área de encabezado y pie de página utilizan este tipo de bloque.
  6. core/text_list: Algunos bloques como  contentleftright etc. son de tipo  core/text_list. Cuando se procesan estos bloques, todos sus bloques secundarios se procesan automáticamente sin la necesidad de llamar al getChildHtml() método.
  7. page/html_wrapper: Este bloque se usa para crear un bloque contenedor que presenta sus bloques secundarios dentro de una etiqueta HTML establecida por la acción  setHtmlTagName. La etiqueta predeterminada es  <div> si no se establece ningún elemento.
  8. page/html_breadcrumbs: Este bloque define rutas de navegación en la página.
  9. page/html_footer: Define el área de pie de página de la página que contiene enlaces de pie de página, mensaje de derechos de autor, etc.
  10. core/messages: Este bloque muestra mensajes de error / éxito / aviso.
  11. page/switch: Este bloque se puede utilizar para el cambio de idioma o de tienda.

Esta es una lista de los tipos de bloques que se utilizan con más frecuencia. Hay muchos otros tipos de bloques que se utilizan en implementaciones de temas avanzados.

Kamesh Jungi
fuente
¿Qué pasa con: {{block type = "cms / block" block_id = "terms"}}
daslicht
5
@daslicht Ya mencioné en la respuesta que: Esta es una lista de los tipos de bloques que se usan comúnmente. Hay muchos otros tipos de bloques que se utilizan en implementaciones de temas avanzados.
Kamesh Jungi
Gracias. Fue realmente útil.
arqam
8
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

la página es un FrontendName definido en el etc/config.xmlarchivo html es un nombre de clase de bloque

más detalles:

en esta línea type(type="page/html")defina el nombre de la clase de bloque relacionado con su template(template="example/view.phtml">)y el nombre es el único para cada bloque.

primero ver la estructura de carpetas

aplicación> local> espacio de nombres> nombre del módulo> etc> config.xml

establecimos FrontendName = 'mymodule'

aplicación> local> espacio de nombres> nombre del módulo> Bloque > hello.php

en hello.php creaste una función

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

y ahora ve a tu página XML de diseño:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> aquí mydata es el nombre de la interfaz

y ahora ven a tu plantilla

plantilla / ejemplo / página view.phtml

aquí puedes llamar directamente a la función mydata ()

me gusta

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

ahora puede obtener su salida en el navegador "Se llama el bloque"

Devendra Kumar Gupta
fuente
Usted nombró al bloque hello.php pero el nombre de la clase de bloque es 'namespace_modulename_Block_Data', ¿no debería ser Hello al final del nombre?
Rai Ehtisham
5

No sé sobre el tipo "B", pero "A" se refiere a la etiqueta de nombre de su módulo en el ejemplo config.xml en config.xml:

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

No, no te equivocas. Pero "<!-- script -->"puede resultar confuso. Aclaremos: como se indica en las respuestas anteriores, este es un alias, que consta de dos partes, la primera parte ("A") en sí es el alias que define para las clases de su módulo en las de su módulo config.xml, la segunda es una ruta relativa a la valor del nodo. Estos juntos ("A" + "B" en mayúscula) se traducirán a un nombre de clase, utilizando la primera parte (el valor del nodo "A") exactamente como lo define (observe las mayúsculas / minúsculas si no desea horas de sufrimiento) y la segunda parte se escribe con mayúscula después de cada guión bajo. Entonces, comience con el ejemplo A / B con un bloque y esta configuración:

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

En tiempo de ejecución A/Bsería resuelto por la configuración de Magento para Vendor_Module_Block_Bque luego se incluye por la carga automática de la siguiente ruta: public/app/local/Vendor/Module/Block/B.php. Para obtener una mejor comprensión, le aconsejo que eche un vistazo al Mage_Core_Model_Config::getGroupedClassName(),Mage_Core_Model_Config::getModelInstance() y Varien_Autoload::autoload().

ZeNC
fuente
3

No sé sobre el tipo "B", pero "A" se refiere a la etiqueta de nombre de su módulo en config.xml

Un ejemplo en el archivo config.xml:

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

nb: espero no estar equivocado ..

Rully
fuente