Magento. Insertar bloque en otro sin cambiar el código de la plantilla

Intenté encontrar una solución pero sin resultados. Mi tarea es escribir el módulo. Debe insertar algunos html en el bloque existente.

Me di cuenta de que cuando usaba los archivos .xml de diseño, simplemente podía insertar mi bloque en alguna referencia como

   

y mi bloque también se muestra.

En otros casos, debo llamar al método getChildHtml() y no es bueno porque hace cambiar los archivos .phtml de la plantilla.

Entonces, ¿hay alguna manera de insertar mi bloque phtml en cualquier otro bloque phtml sin llamar a getChildHtml() ?

Solutions Collecting From Web of "Magento. Insertar bloque en otro sin cambiar el código de la plantilla"

Hay una forma de hacerlo, aunque no es una solución enteramente elegante. Sin embargo, funcionará en la mayoría de los casos y ha resultado útil en ocasiones.

Básicamente, la idea es que reemplaces el bloque que deseas representar tu bloque antes / después en tu diseño XML, coloca ese bloque como un elemento secundario en tu bloque y luego renderiza su salida antes / después del tuyo.

Supongamos que desea generar un bloque antes del bloque de totales en la página de detalles del carrito, puede hacer lo siguiente en el layout.xml de su extensión

    totalstotals  totalsmyextension.block   

Luego en tu archivo template.phtml tendrías:

 
// Your template code
// Render the totals block that you placed inside your block < ?php echo $this->getChildHtml('totals'); ?>

Como dije, esto no se ajustará a todas las situaciones y no es increíblemente elegante, pero funciona.

Jon

No, no hay una manera genérica de agregar tu bloque a ningún otro bloque. La razón por la que funciona de vez en cuando para usted es que hay algunos tipos de bloques que solo enumeran a sus hijos ( core/text_list es uno de ellos) y algunas plantillas hacen lo mismo manualmente (usando $this->getChild() ).

Si desea agregar su bloque debajo de un bloque que no cumple con ninguno de estos criterios, deberá modificar la plantilla para hacer eco de ese bloque.

Puedes probar agregar a xml – siguiendo el método output = “toHtml” – pondrá el bloque al bloque padre Pero …

    

Es posible agregar mayúsculas mediante add to xml – el siguiente método output = “toHtml” – pondrá el bloque en el bloque primario

    

Con el método output = “toHtml” en el diseño, el bloque se clasifica al final del documento. Probé con

      

Y magento renderizó mi bloque después de la etiqueta html end

Creo que no se puede generar un bloque sin tenerlo en una plantilla que se muestra. Entonces, si crea su extensión además de crear su bloque, debe llamarla en la plantilla donde lo desee. Desafortunadamente eso significa que alguien podría agregar su extensión en su sitio web y si han creado su propia copia del archivo de la plantilla donde se agregó su bloque porque querían modificarlo en su tema, así su bloque no se mostrará allí. Tendrán que darse cuenta de que su módulo necesita una modificación de una plantilla y poner la modificación en su propia plantilla ellos mismos.

Un bloque puede enviarse por sí mismo sin ser llamado en una plantilla si le agrega el atributo output="toHtml" , pero como algunos otros han señalado, esto hará que el bloque se represente después de la etiqueta . Eso es normal porque el output="toHtml" es lo que hace que el bloque raíz funcione. El bloque raíz no se puede incluir en una plantilla porque no tiene padre, por lo que usa el atributo output="toHtml" y lo hace aparecer. Eso funciona porque cuando Magento renderiza su diseño (construye el HTML de la página) llama al método getOutput () de la clase Mage_Core_Model_Layout y este método realmente obtiene todos los bloques que tienen un param de salida y los vomita en la página 1 por 1 . Normalmente debería tener solo 2 de tales bloques, raíz y “core_profiler”. (sí, eso significa que el generador de perfiles aparecerá después de la etiqueta HTML de cierre).

Encontré una solución elegante usando Observer y escribí una publicación en el blog de la compañía: http://www.fxplabs.com.br/blog/instanciando-blocos-em-qualquer-lugar-magento/

traducción al inglés:

http://translate.google.com/translate?sl=pt&tl=en&js=n&prev=_t&hl=pt-BR&ie=UTF-8&eotf=1&u=http%3A%2F%2Fwww.fxplabs.com.br%2Fblog%2Finstanciando- blocos-em-qualquer-lugar-magento% 2F