Insertar etiquetas Open Graph a través de un módulo y bloque personalizados
-
12-12-2019 - |
Pregunta
Estoy usando Magento EE 1.6
Cuando uso una clase de bloque personalizada para mostrar algunas etiquetas dentro de mi <head>
, el bloque no se mostrará.Pero si uso el "page/html"
tipo, todo está bien...Necesito mi clase personalizada para agregar algunas funciones al bloque (activación, obtención de la URL de la imagen, etc.).
Por favor ayúdame a entender lo que me perdí.Esto es lo que he hecho hasta ahora:
aplicación/etc/modules/Wbx_Social.xml:
<?xml version="1.0"?>
<config>
<modules>
<Wbx_Social>
<active>true</active>
<codePool>local</codePool>
</Wbx_Social>
</modules>
</config>
aplicación/código/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>
aplicación/código/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 */
}
aplicación/diseño/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>
Y finalmente la plantilla:aplicación/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; ?>
Por si acaso, no me olvidé del Wbx_Social_Helper_Data
ayudante vacío.
En wbx_social.xml
, cuando intento cambiar la clase de bloque para type="core/template"
o type="page/html"
(por ejemplo), el bloque se muestra correctamente (sin ningún acceso a funciones personalizadas, por supuesto)
Realmente necesito una pista, han pasado varias horas que estoy arrancando...
Solución 2
Ok, descubrí el origen del problema.Efectivamente el problema era de mi bloque. Wbx_Social_Block_Opengraph
que implementó un getUrl()
método.Gran error ! Mage_Core_Block_Abstract
(un antepasado de mi bloque) ya tiene un getUrl()
método pero con una firma diferente.Mi verdadera gran pregunta es:¿Por qué diablos no recibí ningún error/advertencia?Habría ahorrado mucho tiempo...
De todos modos, cambié mi propio método para getOgUrl()
y voilá !Mis etiquetas se muestran como quería....
¡Muchas gracias por sus sugerencias, amigos!
Otros consejos
Hay varios tipos de bloques en Magento.Ver aplicación\código\core\Mage\Core\Block\
Uno de ellos es "lista".Obtiene a todos los niños y los genera uno por uno.El content
El bloque funciona así.
Pero la mayoría de los bloques tienen el tipo "plantilla".Significa que tienen algunas plantillas .phtml asociadas y las representan.Por ejemplo, su bloque tiene ese tipo.
Para agregar algún bloque en el encabezado ( type="template" ), debe editar el archivo head.phtml y llamar al bloque secundario usando $this->getChildHtml('opengraph')