2012-03-13 6 views
2

私は、ページのタイトルを変更するモジュールを作ろうとしていますが、2つのモジュールで同じクラスを拡張しますか? Magentoモジュールの競合?

Yoast_CanonicalUrlと呼ばれる別のモジュールを有効にするまで、私のモジュールは正常に動作します。

Yoastモジュールは、タイトルの方法のいずれかに触れていないが、私のモジュールと同じクラスを拡張しない:Mage_Page_Block_Html_Head {}

私はそれが存在する場合yoastクラスを拡張しようとしているが、私のモジュールが一度に機能しなくなりますyoastモジュールが有効になっています。

私は彼の方法が私に告白していないかどうかを確認するコードを見ましたが、それらはありません。

ただ、ここに私のHead.phpあるとすぐYoastはただイマイチもうロードされた私のコードをロードされているよう:(

ようだ:ここで

<?php 

if (!(string)Mage::getConfig()->getModuleConfig('Yoast_CanonicalUrl')->active == 'true') 
{ 
    class Yoast_CanonicalUrl_Block_Head extends Mage_Page_Block_Html_Head{} 
} 
class Company_MetaKeyManager_Block_Head extends Yoast_CanonicalUrl_Block_Head 
{ 
    public function setTitle($title) 
    { 
     $this->_data['title'] = Mage::getStoreConfig('design/head/title_prefix') . ' ' . $title 
      . ' ' . Mage::getStoreConfig('design/head/title_suffix'); 
     return $this; 
    } 
    public function getTitle() 
    { 
     if (empty($this->_data['title'])) { 
      $this->_data['title'] = $this->getDefaultTitle(); 
     } 
     return htmlspecialchars(html_entity_decode(trim($this->_data['title']), ENT_QUOTES, 'UTF-8')); 
    } 
    public function getDefaultTitle() 
    { 
     return 'Hello World'; 
    } 
} 

は私のConfig.xmlです:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Company_MetaKeyManager> 
      <version>0.1.0</version> 
     </Company_MetaKeyManager> 
    </modules> 
    <global> 
     <blocks> 
      <MetaKeyManager> 
       <class>Company_MetaKeyManager_Block</class> 
      </MetaKeyManager> 
      <page> 
       <rewrite> 
        <html_head>Company_MetaKeyManager_Block_Head</html_head> 
       </rewrite> 
      </page> 
     </blocks> 
     <helpers> 
      <MetaKeyManager> 
       <class>Company_MetaKeyManager_Helper</class> 
      </MetaKeyManager> 
     </helpers> 
    </global> 
</config> 
+0

これは古い競合です。どのMagentoのバージョンを使用していますか? Magentoには1.4以降の標準URL oobがあります。 – benmarks

+0

私のMagentoはバージョン:1.6.2.0 CE私のバージョンは標準的なURLをすでに持っていますか? –

+0

商品ページやカテゴリページに表示されます。管理者でオン/オフを切り替えます。 – benmarks

答えて

2

Eeekを解決するために、同じクラスを拡張するクラスを拡張するために作成されているようです。

最初のそれは、この順にしようとPHPのオートローダーの優先順位(include_pathの)

を覚えて、潜在的なクラスのロードと優先順位紛争での作業:

./app/code/local 
./app/code/community 
./app/code/core 

ので、ローカルに定義されているものに関係なく、コミュニティを上書きします内部のMagentoの書き換えの

拡張機能では、拡張機能拡張を変更して拡張します。または、Yoast拡張機能config.xmlからリライトを削除し、拡張機能でYoast拡張機能を拡張します。

そして、あなたは同じ機能を無効にしたいことが起こる場合は、ちょうど

あなたの関数の終わりに
return parent::myfunction() 

し、それを拡張したクラス関数をさせていただきますしてください。

シンプル。

1

これは競合状態です。誰でも最初にクラスを拡張します。試してみて、条件付きでクラス名/拡張子を宣言していない - だから、Yoastが最初にそうYoastこの

+0

Yoastsクラスの拡張がうまくいかない理由はありますか?解決策は、鉱山作業を取得するために他のモジュールを変更することはできません=/ –

+1

もあなただけの競合があなたが常にそう代わりpage_block_html_head –

+0

ですでに設定でyoastクラスを書き換えることができますが起こるのであれば、これを試して、PHPでクラスを拡張する1時間を取得Yoastクラスを拡張し、モジュールで書き直します –