2012-04-19 8 views
0

私のmagentoインストールには、送料無料のショッピングカートルールとクーポンルールがあります。クーポンが入力されると、送料が無料になります。これは望ましくありませんが、Magentoの既知の状態です:Magento Free shipping and Coupon discount注:誰かがTHAT問題をオーバーライドせずに修正する方法を知っている方が望ましいでしょう。Magento Shopping Cartルールクラスオーバーライドモジュール

私はこれを約3時間続けました。私はSO、Googleなどを検索し、解決策を見つけることはできません。

質問:
私はこの記事に基づいて動作を修正モジュールを書き込もうとしています:
Magento Issue with Cart Price

私が上書きしようとしていたクラスがAlan Storm's free toolを使用しMage_SalesRule_Model_Resource_Rule_Collection
で、私がいることを発見しましたuriはsalesrule/resource_rule_collection,
です。ここでは、クラスが次の場所にあることを確認しています:
app/code/core/Mage/SalesRule/Model/Resource/Rule/Collection.php
上記のファイルからクラスを拡張し、ここでクラスもあります。これらの
アプリ/コード/コア/メイジ/ SalesRule /モデル/ Mysql4 /ルールは/ Collection.php
(どちら私がすべきオーバーライドしていますか?)

私の人生にとって、私は適切なconfig.xml構文を見つけて、目的のクラスを上書きすることができません。

私の設定は、現在、そのようになっています

<salesrule_resource_rule><rewrite><collection> 
<salesrule_resource><rewrite><rule_collection> 
<salesrule_resource><rewrite><collection> 
<salesrule><rewrite><resource_collection> 
<salesrule><rewrite><resource_rule_collection> 
<salesrule><rewrite><rule_collection> 
<salesrule_mysql4><rewrite><rule_collection> 
<salesrule_mysql4_rule><rewrite><collection> 

を:

<config> 
    <modules> 
     <My_Couponrule> 
      <version>1.0.0</version> 
     </My_Couponrule> 
    </modules> 
    <global> 
     <models> 
      <salesrule> 
       <rewrite> 
        <resource_rule_collection>My_Couponrule_Model_Resource_Rule_Collection</resource_rule_collection> 
       </rewrite> 
      </salesrule> 
     </models> 
    </global> 

はしかし、私は慎重に私が推測することができ、すべての組み合わせが適切であるかもしれないし、それらのどれも働いていない試してみました注:
1.設定ファイルがロードされていることを知っていますが、システム - >構成 - >詳細を確認しました
2.ロードされたクラスがブラウザに出力されているため、設定ファイルがロードされていることがわかりました。他のクラスをオーバーライドして正常に出力されていることを確認しました。
3.私は知っています私が行った各変更は、変更が正しくアップロードされたことを確認するために追加した(そして毎回変更した)別の書き直しによってロードされました。
3.はい、私はタグを確保することについて非常に慎重だったが、適切な対応する終了タグで閉じた助けてください
4.キャッシングは無効になっているので、ロードされていないファイルは、問題

ではありません。私は多くの髪が残っていません...

答えて

11

Magento 1.6.1でテストしましたが、すべてのバージョンに適用する必要があります(最新バージョンではリソースモデルの命名規則が変更されているため、それに応じて動作します)。

最初に、設定を理解するのに役立つ2つのレッスンがあります。

レッスン1

Magentoのは、モデルを持っています。モデルにはリソース・モデルがあります。リソース・モデルは、モデル・オブジェクトをロードするデータベース/データストア照会を行います。

モデルコレクションは第3の種類のものです。しかし、モデルコレクションはデータベースに照会するため、モデルコレクションもモデルリソースとなると判断されました。そのため、コレクションをインスタンス化するには、

Mage::getResourceModel('salesrule/resource_rule_collection'); 

を使用します。あなたは

Mage::getModel('catalog/product')->getCollection(); 

を使用する場合Magentoのは、実際に舞台裏で

Mage::getResourceModel('catalog/product_collection'); 

を呼んでいます。あなたが唯一のモデル、ヘルパー、およびブロックを書き換えることができ

レッスン2

。リソース・モデルを直接書き換えることはできません。幸いにも、私たちは運が出ていません。別の混乱の抽象的なビットで、Magentoのリソースモデルは実際にはモデルそのものです。あなたは

Mage::getResourceModel('salesrule/resource_rule_collection'); 

を呼び出すとMagentoのは、最終的には、リソースのモデルクラスをインスタンス化する

Mage::getModel('salesrule_resource/resource_rule_collection') 

を呼び出します。表示されない場合は、リソース・モデル・グループsalesruleがモデル・グループsalesrule_resourceに変換されます。値salesrule_resourceは、<salesrule>モデルノードの下のノード<resourceModel>を検索することによって導出されます。

<salesrule> 
    <class>Mage_SalesRule_Model</class> 
    <resourceModel>salesrule_resource</resourceModel> 
</salesrule> 

だから、これが意味することは、モデルクラスsalesrule_resource/resource_rule_collectionを書き直す必要があります。次のXMLは、Packagename_Modulename_Model_Your_Class_Hereをクラス名に置き換えて動作するはずです。

<config> 
    <global> 
     <models> 
      <salesrule_resource> 
       <rewrite>  
        <rule_collection>Packagename_Modulename_Model_Your_Class_Here</rule_collection> 
       </rewrite> 
      </salesrule_resource> 
     </models> 
    </global> 
</config> 
+0

アラン、もう一度あなたは男です。ありがとうございました! –

関連する問題