Magento 1.9.x - Les blocs ne sont pas affichés depuis le module local
-
28-09-2020 - |
Question
Je crée un module pour ajouter des boutons d'appel à l'action supplémentaires.Je n'arrive pas à afficher une sortie.Je pense que je me trompe soit dans les conventions de dénomination, soit dans l'emplacement du fichier (ou les deux).
C'est peut-être aussi la façon dont j'essaie d'insérer le bloc.Je ne veux pas modifier les fichiers phtml si je peux l'éviter.
Comme vous pouvez le voir dans mes fichiers, j'essaie plusieurs façons d'obtenir le rien être sorti - sans succès.
L'objectif est de pouvoir ajouter des boutons CTA supplémentaires après l'ajout au panier, tels que « Demander des échantillons ».
Structure du fichier :
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';
}
La solution 4
J'ai trouvé une solution - elle est en deux parties.
Je n'ai pas défini de chemin frontend->update pour ma mise à jour de mise en page.J'ai inséré ceci après
</global>
<frontend> <layout> <updates> <ctaattributes> <file>ctaattributes.xml</file> </ctaattributes> </updates> </layout> </frontend>
Si j'avais utilisé local.xml, je ne pense pas que cela aurait été nécessaire, mais lors de mes tests, j'ai pensé que je changerais le nom du fichier pour le garder séparé.
- Vous ne pouvez pas utiliser la casse camel dans le nom de la classe de bloc
À l'origine, ma classe était CompanyName_CtaAttributes_Block_CtaButtons
- avec un fichier correspondant appelé CtaButtons.php
.
Changer le nom en CompanyName_CtaAttributes_Block_Ctabuttons
et Ctabuttons.php
a résolu le problème.
Je ne sais pas si c'est le fichier Class dans Block/Blockname.php ou le fichier XML de mise en page qui a un problème.
J'ai testé cela avec CamelCase dans le nom de l'entreprise et le module sans impact, cela semble être limité à la classe et au fichier Blockname.
Autres conseils
- le /blocks/ctabuttons.xml dans votre structure de fichier doit être un PHP Fichier.
- Je ne vois pas le fichier de module qui doit être dans / app / etc / modules
- Vous devriez avoir la version de module dans le fichier config.xml
Si vous utilisez le dernier correctif, vos blocs doivent également être autorisés dans le système-> permission-> bloc
salut vous devez définir le type de bloc d'abord
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>
à
<?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>