2

検索用語に「OR」ではなく「AND」を使用して検索するように、Magento のカタログ検索機能をオーバーライドしようとしています。

これを行う「正しい」方法、つまり更新証明は、独自のモジュールを作成することです。これが私がやったことです。残念ながら、これは機能していません。更新されたメソッドは呼び出されていません。

構成ファイルのセクションは次のとおりです。

<global>
        <models>
            <catalogsearch>
                <rewrite>
                    <fulltext>MyNameSpace_MyModule_Model_CatalogSearch_Fulltext</fulltext>
                </rewrite>
            </catalogsearch>
        </models>
</global>

オーバーライドしようとしているメソッドは Mage_CatalogSearch_Model_Fulltext で、実際に「拡張」を行っています。

class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{
    public function prepareResult($object, $queryText, $query)
    {
        die("It works...");
    }
}

実際にオーバーライドしようとしているクラスが特定のクラスの「作成者」メソッドで呼び出されない場合、この「オーバーライド」を行う意味がないことをどこかで読んだことがありますか? これが本当なら、なぜ私の新しいクラス メソッドが使用されないのか説明できるでしょうか?

その場合、このメソッドをオーバーライドする方法は? 私はここで正しいことをしていますか?

4

3 に答える 3

1

config.xml は次のようになります。

<global>
        <models>
            <catalogsearch>
                <rewrite>
                    <catalogsearch_fulltext>MyNameSpace_MyModule_Model_CatalogSearch_Fulltext</catalogsearch_fulltext>
                </rewrite>
            </catalogsearch>
        </models>
</global>

モデルクラスは以下のようになります。

  class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
    {
    // you should put default declaration of the function here.
// inside the function change the development as you want.
        public function prepareResult($query = null) 
        {
            die('It works...');
        }
    }
于 2013-09-30T09:06:56.593 に答える
0

Ashley が指摘したように、オーバーライドするメソッドの宣言を尊重する必要があります。
そのようなものはうまくいきます:

class MyNameSpace_MyModule_Model_CatalogSearch_Fulltext extends Mage_CatalogSearch_Model_Fulltext
{

    public function prepareResult($query = null, $object = null, $queryText = null)
    {
        die('It works...');
    }
}
于 2013-09-29T12:30:40.040 に答える