Entender getChildHtml en Magento


De la siguiente línea en 2columns-derecha.phtml

<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

No soy capaz de entender eso, de donde viene el contenido de <?php echo $this->getChildHtml('content') ?>.

Bruja .el archivo phtml se llama para mostrar los datos por <?php echo $this->getChildHtml('content') ?>

Author: James Donnelly, 2013-10-21

1 answers

Si estamos discutiendo el frontend del sitio web, la línea en particular que has preguntado....

<?php echo $this->getChildHtml('content') ?>

Se agrega al XML de diseño de Magento en app/design/frontend/base/default/layout/page.XML. En la versión 1.8 de Magento, lo encontrarás definido en las líneas 92-94.

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

Mirando el atributo "type" de esta etiqueta de bloque, podemos saber qué clase de objeto es esta sección del diseño. Viene del módulo "Core", y es de tipo bloque Lista de texto. El nombre de la clase para esto Mage_Core_Block_Text_List. (app / code/core/Mage/Core/Block/Text / List.php). Las listas de texto son simplemente contenedores de bloques cuyo propósito es almacenar bloques secundarios adicionales dentro de ellos. Puede agregar cualquier número de bloques secundarios a la lista de texto y se renderizarán en el orden en que se agregaron o en el orden en que se asignaron.

Por lo tanto, para responder a su pregunta, no hay script de vista (.archivo phtml) que muestra el contenido de get this->getChildHtml ('content'). Los bloques que se han agregado a este bloque, pueden tener scripts de vista asociados con ellos. Para averiguar qué scripts de vista son, tendría que encontrar el XML de diseño que ha agregado el bloque.

Por ejemplo, si tuviera el siguiente archivo de diseño agregado al frontend del tema de mi sitio web:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="content">
            <block type="core/template" name="my_view_script" template="hello/world.phtml" />
        </reference>
    </default>
</layout>

El código anterior, añadiría el bloque con una clase de objeto Mage_Core_Block_Template al bloque con el nombre 'content' (que resulta ser el que usted preguntó). Magento buscará el script de vista en las siguientes ubicaciones, en este orden:

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml
app/design/frontend/base/default/template/hello/world.phtml

El primero que se encuentra, es el que va a utilizar. Si no se encuentra ningún script de vista, Magento registrará un error en var/logs/system.log (configuración predeterminada del archivo de registro) indicando que no se encontró el script de vista. No se producirá ninguna salida del bloque.

Tenga en cuenta que dependiendo de su configuración en Sistema -> Configuración - > Diseño (General), puede haber ubicaciones adicionales package/theme Magento buscará. También hay otros escenarios, como si el campo" Tema Personalizado " se cambia para Páginas CMS individuales, Categorías de Catálogo o Productos de catálogo, la página de vista de estos modelos individuales puede tener una ubicación de script de vista adicional (que coincidirá con el tema seleccionado) que tiene prioridad sobre la configuración predeterminada de su sitio.

Magento seguirá esta misma lógica de reserva cuando busque archivos de traducción, así como archivos XML de diseño.

Tenga en cuenta que es perfectamente aceptable copiar scripts de vista individuales (evite copiar directorios enteros, copie solo los scripts de vista que realmente desea modificar) de app/design/frontend/base/default/template/ a su tema local, y personalícelos para los propósitos del tema de su sitio web. Sin embargo, para tener un sitio compatible con la actualización, los archivos de diseño no deben copiarse de la base a su tema local. Al hacerlo, no sigue las prácticas compatibles con la actualización. En su lugar, las actualizaciones de diseño XML para su tema deben estar contenidas en app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml. No hay diseño instrucciones de app/design/frontend/base/default/layout/*, que no pueden ser removidas/añadidas/cambiadas, lo que sea, con las instrucciones XML adecuadas en local.XML.

 143
Author: Darren Felton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 21:38:31