Domanda

Sto usando Magento EE 1.6

Quando utilizzo una classe di blocco personalizzata per visualizzare alcuni tag all'interno del mio <head>, il blocco non verrà visualizzato. Ma se utilizzo il tipo "page/html", tutto va bene ... Ho bisogno della mia classe personalizzata per aggiungere alcune funzionalità al blocco (attivazione, ottenere l'URL dell'immagine ecc.).

Aiutami a capire cosa mi è mancato. Ecco cosa ho fatto finora:

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 / codice / locale / 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 / reattivo / predefinito / 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>
.

e infine il modello: app / design / frontend / reattivo / predefinito / 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; ?>
.

Nel caso in cui, non ho dimenticato l'aiutante Wbx_Social_Helper_Data Vuoto.

In wbx_social.xml, quando provo la modifica della classe Block per type="core/template" o type="page/html" (ad esempio), il blocco è visualizzato correttamente (senza alcun accesso delle funzioni personalizzate del corso)

Ho davvero bisogno di un suggerimento, sono passate diverse ore che sto strappando ...

È stato utile?

Soluzione 2

ok ho scoperto l'origine del problema. Il problema è stato effettivamente dal mio blocco Wbx_Social_Block_Opengraph che ha implementato un metodo getUrl().Grosso errore !Mage_Core_Block_Abstract (un antenato del mio blocco) ha già un metodo getUrl() ma con una firma diversa. La mia vera domanda è: perché diavolo non ho ricevuto alcun errore / avvertimento ??Avrebbe salvato così tanto tempo ...

Comunque, ho cambiato il mio metodo per getOgUrl() e voilà!I miei tag sono visualizzati come volevo ....

Grazie mille per i tuoi suggerimenti, gente!

Altri suggerimenti

Ci sono diversi tipi di blocchi in Magento.Vedi app \ code \ core \ mage \ core \ Block \

Uno di questi è "Elenco".Ottiene tutti i bambini e li ha appena emessi uno per uno.Il blocco content funziona così.

Ma la maggior parte dei blocchi ha il tipo "modello".Significa che hanno alcuni modelli .phtml associati e renderli.Ad esempio, il tuo blocco ha tale tipo.

Per aggiungere un po 'di blocco nel test (tipo="Template"), è necessario modificare il file Head.phtml e chiamare il blocco figlio utilizzando $this->getChildHtml('opengraph')

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top