カスタムモジュールとブロックを介して開いているグラフタグを挿入します
-
12-12-2019 - |
質問
私はMagento EE 1.6を使っています
カスタムブロッククラスを使用して<head>
内にタグを表示すると、ブロックは表示されません。しかし、"page/html"
タイプを使用した場合、すべてが大丈夫です...ブロックにいくつかの機能を追加するにはカスタムクラスが必要です(有効化、イメージURLなど)。
私が逃したことを理解するのを手伝ってください。これは私がこれまでにやったことです:
app / 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>
と最後のテンプレート:アプリ/デザイン/フロントエンド/応答/デフォルト/テンプレート/ 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
OK私は問題の起源を見つけました。
問題は、Wbx_Social_Block_Opengraph
メソッドを実装したMy Block getUrl()
から実際にありました。大ミス !Mage_Core_Block_Abstract
(My Blockの先祖)には、既にgetUrl()
メソッドがありますが、署名が異なります。
私の本当の大きな質問は、次のとおりです。なぜ私はエラー/警告を受けなかったのですか?それほど多くの時間を節約しました...
とにかく、私はgetOgUrl()
とVoilaの自分の方法を変更しました!私のタグは私が望んでいるように表示されます....
あなたの提案、人々のためにたくさんありがとう!
他のヒント
マゼントには複数のブロックタイプがあります。App \ Code \ Core \ Mage \ Core \ Block \ を参照してください。
そのうちの1つは「リスト」です。それはすべての子供を取得し、それらを1つずつ出力するだけです。content
ブロックはこのように機能します。
しかし、ほとんどのブロックは "テンプレート"タイプです。それは彼らに関連付けられ、それらをレンダリングします。たとえば、ブロックにはそのようなタイプがあります。
ヘッドにブロックを追加するには(type="template")、head.phtmlファイルを編集し、$this->getChildHtml('opengraph')
を使用して子ブロックを呼び出す必要があります。