Magento의 오픈 그래프 문제
-
12-12-2019 - |
문제
Magento에서 Open Graph 확장 프로그램을 생성하는 동안 문제가 발생했습니다. 내 메타태그는 정확하지만 내 메타/og 태그 앞에 코드가 너무 많기 때문에 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의 레이아웃 시스템의 목적을 반대합니다.그럼에도 불구하고 요구 사항 이 기본 헤드 템플릿을 무시하지 않는 경우 다음을 시도하십시오.
이벤트 옵저버를 통해 콘텐츠를 주입
모듈 구성 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);
}
}
지금까지 볼 수있는 한, 이것은 당신의 문제를 해결할 수있는 밖에 없습니다.주식 헤드 블록이나 기본 템플릿은 자식 HTML에 대한 호출 위의 meta
태그를 추가하기위한 조항을 만듭니다.
다른 팁
메타 태그를 지금까지 아래로 밀어넣는 헤드의 렌더링이 정확히 무엇인지 잘 모르겠고 이것이 문제가 되는 것을 본 적도 없습니다(메타 태그를 가능한 한 높게 배치하라는 "경험 법칙" 제외). 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 태그가 포함됩니다.