Question

J'utilise Magento EE 1.6

Lorsque j'utilise une classe de bloc personnalisée pour afficher certaines balises dans mon <head>, le bloc ne s'affichera pas.Mais si j'utilise le "page/html" tapez, tout va bien...J'ai besoin de ma classe personnalisée pour ajouter certaines fonctionnalités au bloc (activation, obtention de l'URL de l'image, etc.).

S'il vous plaît, aidez-moi à comprendre ce que j'ai manqué.Voici ce que j'ai fait jusqu'à présent :

app/etc/modules/Wbx_Social.xml :

<?xml version="1.0"?>
<config>
    <modules>
        <Wbx_Social>
            <active>true</active>
            <codePool>local</codePool>
        </Wbx_Social>
    </modules>
</config>

app/code/local/Wbx/Social/etc/config.xml :

<?xml version="1.0"?>
<config>
    <modules>
        <Wbx_Social>
            <version>0.1.0</version>
        </Wbx_Social>
    </modules>
    <global>
        [...]
        <blocks>
            <wbx_social>
                <class>Wbx_Social_Block</class>
            </wbx_social>
        </blocks>
    </global>
    <frontend>
        <layout>
            <updates>
                <wbx_social>
                    <file>wbx_social.xml</file>
                </wbx_social>
            </updates>
        </layout>
    </frontend>
</config>

app/code/local/Wbx/Social/Block/Opengraph.php :

class Wbx_Social_Block_Opengraph extends Mage_Core_Block_Template
{
    /**
     * @return int
     */
    public function isActive()
    {
        return true; // Will be replaced with store config value
    }

    /* And other useful functions */

}

app/design/frontend/responsive/default/layout/wbx_social.xml :

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="head">
            <block type="wbx_social/opengraph" name="opengraph" as="opengraph" template="social/opengraph.phtml"/>
        </reference>
    </default>
</layout>

Et enfin le modèle :app/design/frontend/responsive/default/template/social/opengraph.phtml :

<?php /* @var $this Wbx_Social_Block_Opengraph */ ?>
<?php if ($this->isActive()) : ?>
    <meta property="fb:app_id"       content="an id"/>
    <meta property="og:type"         content="website"/>
    <meta property="og:site_name"    content="a name"/>
<?php endif; ?>

Au cas où, je n'ai pas oublié le Wbx_Social_Helper_Data aide vide.

Dans wbx_social.xml, quand j'essaie de changer la classe de bloc pour type="core/template" ou type="page/html" (par exemple), le bloc s'affiche correctement (sans aucun accès aux fonctions personnalisées bien sûr)

J'ai vraiment besoin d'un indice, ça fait plusieurs heures que je m'arrache...

Était-ce utile?

La solution 2

Ok, j'ai découvert l'origine du problème.Le problème venait bien de mon bloc Wbx_Social_Block_Opengraph qui a mis en œuvre un getUrl() méthode.Grosse erreur ! Mage_Core_Block_Abstract (un ancêtre de mon bloc) a déjà un getUrl() méthode mais avec une signature différente.Ma vraie grande question est la suivante :pourquoi diable n'ai-je reçu aucune erreur/avertissement ??Cela aurait fait gagner beaucoup de temps...

Quoi qu'il en soit, j'ai changé ma propre méthode pour getOgUrl() et VOILA !Mes tags s'affichent comme je le souhaitais....

Merci beaucoup pour vos suggestions, les amis !

Autres conseils

Il existe plusieurs types de blocs dans Magento.Voir app\code\core\Mage\Core\Block\

L'un d'eux est "liste".Il récupère tous les enfants et les affiche simplement un par un.Le content le bloc fonctionne comme ça.

Mais la plupart des blocs sont de type "modèle".Cela signifie qu'ils sont associés à des modèles .phtml et qu'ils les restituent.Par exemple, votre bloc a ce type.

Pour ajouter un bloc dans le head ( type="template" ), vous devez éditer le fichier head.phtml et appeler le bloc enfant en utilisant $this->getChildHtml('opengraph')

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top