문제

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 태그가 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top