Вставка тегов Open Graph через пользовательский модуль и блок
-
12-12-2019 - |
Вопрос
Я использую 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')