Magento 1.9.x - Bloques no se muestran desde el módulo local
-
28-09-2020 - |
Pregunta
Estoy creando un módulo para agregar algunos botones de acción adicionales a la acción. No puedo obtener una salida para mostrar.Creo que estoy obteniendo las convenciones de nombres o la ubicación del archivo (o ambos) incorrectamente.
También puede ser la forma en que estoy tratando de insertar el bloque.No quiero modificar los archivos PHTML si puedo evitarlo.
Como puede ver en Mis archivos, estoy intentando una serie de hacer que el algo sea de salida, sin suerte.
El objetivo es poder agregar botones CTA adicionales después de agregar al carrito, como 'Solicitar muestras'
Estructura de archivo:
app
Code
local
CompanyName
CtaAttributes
Block -> CtaButtons.php
etc -> config.xml
design
frontend
base
default
layout->ctabuttons.xml
template
ctaattributes
catelog
product ->ctabuttons.phtml
config.xml
<config>
... includes Module and Resource
<global>
<blocks>
<ctaattributes>
<class>CompanyName_CtaAttributes_Block</class>
</ctaattributes>
</blocks>
</global>
</config>
ctabuttons.xml
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="content">
<block type="core/text_list" name="product.info.addtocart" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
<action method="append">
<block>ctabuttons</block>
</action>
</reference>
<reference name="product.info.addtocart">
<block type="core/text_list" name="core-text"><action method="setText"><text><![CDATA[<div>Test</div>]]></text></action></block>
</reference>
</catalog_product_view>
</layout>
ctabuttons.phtml
<?php
/**
*/
Mage::log(get_class($this));
echo 'this is my test';
ctabuttons.php
<?php
class CompanyName_CtaAttributes_Block_CtaButtons extends Mage_Core_Block_Template {
echo 'test';
}
Solución 4
Encontré una solución: está en dos partes.
-
No definió una ruta de actualización de frontend-> para mi actualización de diseño.Inserto esto después de
</global>
<frontend> <layout> <updates> <ctaattributes> <file>ctaattributes.xml</file> </ctaattributes> </updates> </layout> </frontend>
- No puede usar un caso de camello en el nombre de la clase de bloque
Si hubiera usado local.xml, no creo que esto hubiera sido requerido, pero en mis pruebas pensé que cambiaría el nombre del archivo para mantenerlo separado.
Originaly My Class fue CompanyName_CtaAttributes_Block_CtaButtons
, con un archivo correspondiente llamado CtaButtons.php
.
Cambiar el nombre a CompanyName_CtaAttributes_Block_Ctabuttons
y Ctabuttons.php
ha resuelto el problema.
No sé si es el archivo de clase en bloque / bloquename.php o el archivo XML de diseño que tiene un problema.
He probado esto con Camelcase en el nombre y el módulo de la compañía sin impacto, parece estar restringido a la clase y el archivo de bloques.
Otros consejos
- the >blocks/ctabuttons.xml en su estructura de archivos debe ser un PHP archivo.
- No veo el archivo del módulo que debe estar en / aplicar / etc / módulos
- Debe tener versiones de módulo en la configuración config.xml
Si usa el último parche, sus bloques también deben permitirse en el sistema-> Permiso-> Bloque
Hola, necesitas definir el tipo de bloque primero
de
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="content">
<block type="core/text_list" name="product.info.addtocart" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
<action method="append">
<block>ctabuttons</block>
</action>
</reference>
<reference name="product.info.addtocart">
<block type="core/text_list" name="core-text"><action method="setText"><text><![CDATA[<div>Test</div>]]></text></action></block>
</reference>
</catalog_product_view>
</layout>
a
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="product.info">
<block type="core/text_list" name="product.info.ctaattributes" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
</reference>
</catalog_product_view>
</layout>