0

このコードでMage_Payment_Block_Form_Containerクラスを上書きしようとしました:

<blocks>
    <module>
        <class>NS_Module_Block</class>
    </module>
    <payment>
        <rewrite>
            <form_container>NS_Module_Block_Payment_Form_Container</form_container>
        </rewrite>
    </payment>
</blocks>

次に、 app/code/community/NS/Module/Block/Payment/Form/Container.php に次のコードを記述します。

class NS_Module_Block_Payment_Form_Container extends Mage_Payment_Block_Form_Container {
    public function getMethods() {
      echo 'hi';die;
    }
}

次に、onepage チェックアウトにアクセスしますが、このコードは実行されません。私のコードに何か問題がありますか?

4

1 に答える 1

3

を変更する場合はone-page checkout form、適切なブロックをオーバーライドする必要があります。これは、instanceMage_Payment_Block_Form_Containerが直接呼び出されないためです。したがって、直接の書き換えによってオーバーライドされることはありません。

オーバーライドする必要があるクラスは、Mage_Checkout_Block_Onepage_Payment_Methods最終的に拡張Mage_Payment_Block_Form_Containerされ、実際に呼び出されるクラスであるためです。だからあなたの書き直しは読む必要があります:

ファイルには次のconfig.cmlものが含まれている必要があります

<global>
      <blocks>
        <checkout>
         <rewrite>
           <onepage_payment_methods>MyCompany_Checkout_Block_Onepage_Payment_Methods</onepage_payment_methods>
         </rewrite>
        </checkout>
       </blocks>
     </global>

そしてあなたのクラスは次のように宣言されました:

class MyCompany_Checkout_Block_Onepage_Payment_Methods extends Mage_Checkout_Block_Onepage_Payment_Methods
{

     //do your stuff here

} 

ご質問があればお知らせください

于 2014-06-03T16:36:30.687 に答える