2011-07-07 11 views
2

私は、Mage_Page_Block_Html_Headクラスを拡張してgetDefaultTitle()の機能を変更するように設計された、最初のMagentoモジュールに取り組んできました。単純な権利ですか?カスタムMagentoモジュールがコアモジュール全体をオーバーライドし、結果が得られないのはなぜですか?

私は私のモジュールディレクトリ内Title.phpと呼ばれる新しいファイルをローカル/会社/メタデータ/ブロックのディレクトリを作成し、Title.phpに次のコードです:私も調整し始めていない

<?php 
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head 
{ 

} 

getDefaultTitle()の機能と私はすでにボートが不足しているようです。

新しいモジュールをアップロードすると、Mage_Page_Block_Html_Headによって作成されたページのHeadコンテンツ全体が上書きされ、HTMLの空のheadタグで終わります。このように:

<head></head> 

どこが間違っていますか? Title.phpの上記のコード(または欠落)は、そうでないとそうするように言われるまで、拡張クラスにはそれをさせるべきではありませんか?あなたがしようとするとのgetTitleを(宣言)と親メソッドを返すようにしたいことがあり

<config> 

<modules> 
    <Company_Metadata> 
     <version>0.0.1</version> 
    </Company_Metadata> 
</modules> 

<global> 
    <blocks> 
     <page> 
      <rewrite> 
       <html_head>Company_Metadata_Block_Title</html_head> 
      </rewrite> 
     </page> 
    </blocks> 
</global> 

</config> 
+0

設定ファイルと言うと、このファイルはetc/config.xml全体ですが、app/etc/modules/Company_Metadata.xmlのxmlも持っていますか? – B00MER

+0

上記の内容は、ローカル/ Company/Metadata/etc/config.xmlに保存されているconfig.xml全体です。 /app/etc/modules/Company_Metadata.xmlもビルドされ、ロードされます。 –

+0

http:// stackoverflowを見てください。com/questions/25253284/magento-block-override-stops-phtml-from-displaying - 空になったときにクラス名に基づいてフォルダを適切に入れ子にしないルーキーの間違いをしました – Ted

答えて

0

は、ここにモジュールのための私の設定ファイルです。 MagentoはXMLのすべてを1つの大きなツリーにまとめるので、<modules>ノードはapp/etc/modules/Company_Metadata.xmlになければなりません。これは、Consent(sanity)のためです。また、Head.phpには他にもたくさんのメソッドがありますが、それらがまだ正しく動作しているかどうか、XMLリライトが正しく機能しているかどうかを確認してください。

<?php 
class Company_Metadata_Block_Title extends Mage_Page_Block_Html_Head 
{ 
    public function getTitle() 
    { 
     return parent::getTitle(); 
    } 
} 
+0

それでも私は空のヘッドタグと同じ結果を返します。これは、Head.phpのどのメソッドも実行できないことを意味します。それは何かが私の書き直しに間違っていることを意味するでしょうか? –

+0

Magentoのキャッシュをクリアしようとしましたか?また、管理 - >システム - >設定 - >詳細 – B00MER

+0

キャッシュがクリアされている場合、Company_Metadata.xmlファイルが正しく設定されている場合、Magentoがモジュールをロードしていることを検証できます。私はモジュールがロードされているのを見ることができます。 1)それは設定 - >詳細で表示されます。2)モジュールをロードすると、ページの先頭の内容をすべて削除したり書き換えたりするため、フロントエンドを壊します。したがって、CSSやメタデータはレンダリングされません。 –

2

あなたのブロッククラスをconfig.xmlで宣言する必要があります。確かに、MagentoはHeadをオーバーライドしたいと考えていますが、使用するBlockクラスは見つかりません。

このconfig.xmlにしてみてください:

<modules> 
    <Company_Metadata> 
     <version>0.0.1</version> 
    </Company_Metadata> 
</modules> 

<global> 
    <blocks> 


     <metadata> 
      <class>Company_Metadata_Block</class> 
     </metadata> 


     <page> 
      <rewrite> 
       <html_head>Company_Metadata_Block_Title</html_head> 
      </rewrite> 
     </page> 
    </blocks> 
</global> 

+0

ありがとうございました。私はこれを試して、あなたに私の結果を知らせます。それは理にかなっている。質問:上記のセクションにネストされているタグは実際にはですか? –

+0

あなたのモジュールがブロックを使用する場合(Magentoには "view-models"とします)、Magentoがconfig.xmlでそれらにアクセスする方法を定義する必要があります。したがって、このノードを追加しないのは、モジュールの/ BlockフォルダにPHPファイルを追加すると間違いです。これはモデルやヘルパーでも同じです。 の使用に関しては、モジュール名、小文字(メタデータ)を使用する必要があります。一方、 "Company"は他のモジュールで使用できる名前空間です。 Magentoコアの場合、ネームスペースは "Mage"であり、モジュールはニュースレター、カタログ、顧客...などです。だからMage_Newsletter、Mage_Catalog、Mage_Customerなどです。 –

+0

小文字の "メタデータ"を使用することは強制されません。これは慣習にすぎません。どのようなものを選んでも、タイプを指定するときにレイアウトで使用する必要があります。 '' – clockworkgeek

1

あなたはモジュールの出力が無効になっていないことを確認してください。無効な出力で処理されたRewritesはまだ親メソッドを呼び出しても何も表示されません

0

これは古い質問ですが、今日同様の問題に遭遇して固定されているため、 。

私は同じ問題があり、コンパイル機能がオンになっていることが原因で問題が発生していることが判明しました。そのため、Magentoは設定変更を受け取りますが、コンパイルされたコードの一部ではないため、新しいコードをロードすることはできません。コンパイルを無効にするか、コンパイルプロセスを再度実行すると、問題が解決しました。

関連する問題