Вставка тегов Open Graph через пользовательский модуль и блок

magento.stackexchange https://magento.stackexchange.com//questions/40505

Вопрос

Я использую Magento EE 1.6.

Когда я использую пользовательский класс блока для отображения некоторых тегов внутри моего <head>, блок не будет отображаться.Но если я использую "page/html" типа, все в порядке...Мне нужен мой собственный класс, чтобы добавить в блок некоторые функции (активация, получение URL-адреса изображения и т. д.).

Пожалуйста, помогите мне понять, что я пропустил.Вот что я сделал до сих пор:

приложение/etc/modules/Wbx_Social.xml:

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

приложение/код/локальный/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>

приложение/код/локальный/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 */

}

приложение/дизайн/интерфейс/отзывчивый/по умолчанию/макет/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>

И наконец шаблон:app/design/frontend/Response/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; ?>

На всякий случай я не забыл Wbx_Social_Helper_Data пустой помощник.

В wbx_social.xml, когда я пытаюсь изменить класс блока для type="core/template" или type="page/html" (например), блок отображается корректно (без доступа к пользовательским функциям естественно)

Очень нужна подсказка, уже несколько часов вырываюсь...

Это было полезно?

Решение 2

Хорошо, я выяснил причину проблемы.Проблема действительно была из моего блока Wbx_Social_Block_Opengraph который реализовал getUrl() метод.Большая ошибка ! Mage_Core_Block_Abstract (предок моего блока) уже имеет getUrl() метод, но с другой сигнатурой.Мой действительно большой вопрос:какого черта я не получил ни одной ошибки/предупреждения??Это сэкономило бы столько времени...

В любом случае, я изменил свой собственный метод для getOgUrl() и ВУАЛЯ!Мои теги отображаются так, как я хотел....

Большое спасибо за ваши предложения, ребята!

Другие советы

В Magento есть несколько типов блоков.См. приложение\code\core\Mage\Core\Block\.

Один из них — «список».Он получает всех детей и просто выводит их один за другим.А content блок работает так.

Но большинство блоков имеют тип «шаблон».Это означает, что у них есть несколько связанных шаблонов .phtml, и они отображают их.Например, ваш блок имеет такой тип.

Чтобы добавить какой-либо блок в заголовок ( type="template" ), вам необходимо отредактировать файл head.phtml и вызвать дочерний блок, используя $this->getChildHtml('opengraph')

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top