¿Cuál es la forma / enfoque correcto para modificar una plantilla de Magento?

15

Sugiéreme el enfoque correcto, quiero personalizar la página "EMAIL to Friend" en la ventana emergente, cuando el usuario haga clic en el botón (envíe este producto por correo electrónico). Al habilitar la sugerencia de plantilla, descubrí que el botón se representa con

frontend / rwd / default / template / catalog / product / view / sharing.phtml

Y el archivo de diseño correspondiente es catalog.xml(en frontend / rwd / default / layout)

Así que creé una local.xmlen la misma carpeta donde catalog.xmlexiste con el siguiente código (solo lo que he dado en test.phtmllugar de sharing.phtml, solo para 'Depurar')

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Pero no pasa nada, quiero decir cómo puedo cambiar (sobrescribir) el diseño predeterminado del tema, sin modificar existentes xmly phtmlarchivos?

Dimag Kharab
fuente

Respuestas:

10

Esto es lo que debes poner dentro de tu local.xmlarchivo.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Errores que has cometido

  • Usó dos controladores de actualización de diseño : defaulty catalog-product-view. Eso está mal. Solo necesita un controlador de actualización de diseño. La correcta que debes usar aquí escatalog_product_view

  • Entonces catalog-product-viewes desconocido para magento. El nombre propio escatalog_product_view

  • Dado que el bloque para compartir ya está definido a través de catalog.xml, ahora debe referirse a ese bloque y luego cambiar la plantilla agregando acción setTemplate. Eso es lo que hace el script anterior.

Espero que tengas la idea

Rajeev K Tomy
fuente
Usé su local.xml, todavía se muestra el existente (he creado un test.phtml) en la carpeta especificada
Dimag Kharab
¿borraste tu caché? Se supone que esto funciona, si ha hecho todo correctamente.
Rajeev K Tomy
Sí, el almacenamiento en caché está desactivado en mi caso y he reindexado también (supongo que no era necesario)
Dimag Kharab
agregue esto <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>directamente debajo del nodo <catalog_product_view>. y mire si el contenido del archivo test.phtml está disponible en la parte inferior de una página de vista del producto
Rajeev K Tomy
Sin suerte hermano todavía
Dimag Kharab
10

Trataré de dar una respuesta general.

Cómo cambiar plantillas

En su tema, puede anular cualquier phtmlarchivo del tema predeterminado o tema principal. Copie el archivo original app/design/frontend/[package]/[theme]/template/[path/to/phtml]y realice sus cambios.

Si todavía no tiene un tema personalizado específico del proyecto, por ejemplo, porque acaba de comprar un tema, asegúrese de crear uno en

app/design/frontend/[original-package]/[project-name]

Heredará de [original-package]/[default], no necesita copiar todo de forma predeterminada, solo los archivos donde necesita hacer cambios.

Modificaciones específicas del módulo.

Una alternativa para anular el phtmlarchivo es cambiar la ruta de la plantilla. Esto generalmente se puede hacer en formato XML como este:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Pero esto está destinado a ser utilizado por módulos que necesitan cambiar una plantilla, no para cambios específicos del tema. La nueva plantilla debería estar base/defaultentonces.

Cómo usar local.xml / theme.xml

El local.xmlarchivo debe estar en el directorio del tema real que está utilizando, es decir

app/design/frontend/[package]/[theme]/layout

Varios local.xmlarchivos en la jerarquía alternativa no se tienen en cuenta. Se utiliza el primero de estos que se puede encontrar:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(suponiendo una jerarquía predeterminada y sin una jerarquía definida personalizada)

Cómo hacer cambios

Solo debe tener modificaciones en local.xml, no repetir las definiciones que ya están en los archivos XML originales. Eso también significa que debe evitar copiar archivos XML del tema predeterminado para realizar cambios directamente en los archivos. ¡Mantenga layoutlimpio el directorio de su tema !

Los elementos típicos de local.xmlson <remove>eliminar completamente los bloques existentes <action method="unsetChild">y <action method="append">mover un bloque de un padre a otro, o llamar a cualquier otro método en los bloques existentes para modificar su comportamiento.

Magento 1.9

Comenzando con Magento 1.9, la mejor práctica es no utilizar layout/local.xmlestos cambios, peroetc/theme.xml

En resumen, puede agregar una actualización de diseño en app / design / frontend / yourpackage / etc / theme.xml. La ventaja es que tiene control sobre el orden de carga de sus actualizaciones de diseño. Antes de Magento 1.9, local.xml siempre se cargaba en último lugar, y era imposible que las directivas de diseño se ejecutaran después.

Ya no estoy usando local.xml para modificaciones de tema específicas del proyecto. Creo que local.xml solo se usa por razones de compatibilidad con versiones anteriores (en 1.9 y superiores) ya que no tiene sentido usarlo más. Local.xml también se elimina en Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Fuente: https://erfanimani.com/dont-use-local-xml/

Fabian Schmengler
fuente