Вопрос

При создании расширения Open Graph в Magento я столкнулся с проблемой: хотя мой метатег верен, Facebook не может уловить мой тег og, потому что перед моим мета/ог-тегом слишком много кода.

Кто-нибудь еще сталкивался с этим и есть ли у вас какие-либо предложения?

<reference name="head">
    <block type="catalog/product_view" name="product.opengraph">
        <action method="setTemplate">
            <template>socialtag/opengraph_product.phtml</template>
        </action>
    </block>      
</reference>
Это было полезно?

Решение

Вот альтернативное решение.Это не приятно и должно считаться взлом.Это также происходит против целей системы макета Magento.Тем не менее, если ваша требование не переопределить шаблон базовой головки, затем попробуйте:

Должен ли содержание через событие Observer

В вашем модуле Config XML добавьте следующее событие:

...
<global>
    ...
    <events>
        <http_response_send_before>
            <observers>
                <head_modify>
                    <type>singleton</type>
                    <class>Namespace_Module_Model_Observer</class>
                    <method>injectOgTags</method>
                </head_modify>
            </observers>
        </http_response_send_before>
    </events>
    ...
</global>
...
.

, а затем вы бы создали класс наблюдателя, чтобы соответствовать:

<?php

class Namespace_Module_Model_Observer
    extends Varien_Event_Observer
{

    public function injectOgTags(Varien_Object $object)
    {
        $response   = $object->getResponse();
        $html       = $response->getBody();

        // Some logic for building up the appropriate meta tags
        // based on URL or product or layout handles
        $html = str_replace('<head>', '<head><meta property="og:title" content="Page title" />', $html);

        $response->setBody($html);
    }

}
.


До сих пор, насколько я вижу, это только способ решить вашу проблему.Ни стоковые головки, ни его базовый шаблон не приносят положения для добавления тегов meta выше его вызова для ребенка HTML.

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

Я не уверен, что именно рендеринг в голове толкает ваши метатеги так далеко вниз, и я не видел в этом проблемы (за исключением «эмпирического правила», которое гласит, что метатеги следует размещать как можно выше в HEAD).

В любом случае вы можете попробовать следующее:

<reference name="head">
    <block type="catalog/product_view" name="product.opengraph" before="-">
        <action method="setTemplate">
            <template>socialtag/opengraph_product.phtml</template>
        </action>
    </block>      
</reference>

Обратите внимание на before="-" атрибут.Это будет обнаружено во время генерации блока (см. Mage_Core_Model_Layout::_generateBlock) и вставлен наверх стека родительского блока (см. Mage_Core_Block_Abstract::insert).

К сожалению, это само по себе не решит вашу проблему, поскольку стандартный шаблон головы Magento не отображает дочерние элементы в отсортированном порядке.Поэтому вам придется самостоятельно переопределить этот шаблон и принудительно установить флаг сортировки.

Для этого измените шаблон головы через XML-макет:

<reference name="head">
    <action method="setTemplate">
        <template>your/module/head.phtml</template>
    </action>
</reference>

И в этом шаблоне визуализируйте дочерний HTML следующим образом:

<?php echo $this->getChildHtml('', true, true) ?>

Где третий аргумент — это флаг сортировки, который сообщает блоку отображать дочерние элементы в соответствии с вашим управляемым порядком.Это поднимет ваш блок наверх.

Кстати, поскольку вам в любом случае придется пройти через все эти проблемы, чтобы расширить шаблон головы, вы также можете захотеть увеличить рендеринг дочернего элемента в верхней части шаблона (над CSS/JS).


БОНУС:

Почему вы используете catalog/product_view блокировать?См. это расширение для хорошего шаблона для сравнения вашего кода: https://github.com/thaddeusmt/magento-fb-opengraph/ -- их реализация охватывает теги OG, а не только продукты.

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