Frage

Ich verwende Magento EE 1.6

Wenn ich eine benutzerdefinierte Blockklasse verwende, um einige Tags in meinem anzuzeigen <head>, Block wird nicht angezeigt.Aber wenn ich das benutze "page/html" Typ, alles ist in Ordnung...Ich benötige meine benutzerdefinierte Klasse, um dem Block einige Funktionen hinzuzufügen (Aktivierung, Bild-URL abrufen usw.).

Bitte helfen Sie mir zu verstehen, was ich verpasst habe.Folgendes habe ich bisher gemacht:

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>

Und zum Schluss die Vorlage: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; ?>

Nur für den Fall, ich habe das nicht vergessen Wbx_Social_Helper_Data leerer Helfer.

In wbx_social.xml, wenn ich versuche, die Blockklasse für zu ändern type="core/template" oder type="page/html" (zum Beispiel) wird der Block korrekt angezeigt (natürlich ohne Zugriff auf benutzerdefinierte Funktionen)

Ich brauche wirklich einen Hinweis, es sind mehrere Stunden vergangen, die ich herausreiße ...

War es hilfreich?

Lösung 2

Ok, ich habe den Ursprung des Problems herausgefunden.Das Problem kam tatsächlich von meinem Block Wbx_Social_Block_Opengraph das implementierte a getUrl() Methode.Großer Fehler ! Mage_Core_Block_Abstract (ein Vorfahre meines Blocks) hat bereits einen getUrl() Methode, aber mit einer anderen Signatur.Meine wirklich große Frage ist:Warum zum Teufel habe ich keine Fehlermeldung/Warnung erhalten??Es hätte so viel Zeit gespart...

Wie auch immer, ich habe meine eigene Methode geändert getOgUrl() und VOILA!Meine Tags werden so angezeigt, wie ich es wollte....

Vielen Dank für eure Vorschläge, Leute!

Andere Tipps

In Magento gibt es mehrere Blocktypen.Siehe app\code\core\Mage\Core\Block\

Eine davon ist „Liste“.Es ruft alle untergeordneten Elemente ab und gibt sie einzeln aus.Der content Block funktioniert so.

Aber die meisten Blöcke haben den Typ „Vorlage“.Das bedeutet, dass ihnen einige .phtml-Vorlagen zugeordnet sind und diese rendern.Ihr Block hat beispielsweise einen solchen Typ.

Um einen Block im Kopf hinzuzufügen ( type="template" ), müssen Sie die Datei head.phtml bearbeiten und den untergeordneten Block mit aufrufen $this->getChildHtml('opengraph')

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top