2011-12-27 9 views
1

製品のURLパスに基づいて書き換えルールをロードしようとしています。loadByRequestPath()が現在のURLパスでパラメータをオーバーライドしています

これを達成するには、Mage_Core_Model_Url_RewriteでloadByRequestPath()メソッドを使用しています。ここで

public function loadByRequestPath($path) 
{ 
    Zend_Debug::dump($path); // returns the path to my module 
    $this->setId(null); 
    $this->_getResource()->loadByRequestPath($this, $path); 
    $this->_afterLoad(); 
    $this->setOrigData(); 
    $this->_hasDataChanges = false; 
    return $this; 
} 

は私のモジュールコードされています:しかし、私は次のような結果を得るため、この方法を供給何で(コード内のコメントをチェックしてください)奇妙

​​

、私はこれを取り戻す:

Array ([0] => rewrites/getProductRewrites 
     [1] => rewrites/getProductRewrites/) 
Array ([0] => 01003-product-name) 

loadByRequestPath()は何らかの理由で2回呼び出されています。 $ productRewriteはまだ空のオブジェクトを返します。

$ product-> getUrlPath()が正しいパスを返すことを確認しました。 (2番目の配列に見られるように)

私はMagento 1.6.1です。

+0

これは明らかではありません1.あなたがこれから抜け出すことが期待される動作は何ですか、そして、あなたが実際に得ている動作は何ですか。 –

+0

こんにちはアラン。意図された振る舞いは、供給されたパラメータを返すための$ pathであり、これは製品パスでなければなりません。代わりに、私のモジュールへのパスを含む配列を返しています。 –

+0

ああ、それは今や理にかなっています。最初のアレイはMagentoの標準ルーティングプロセスの一部です。 MagentoはすべてのURLをloadByRequestPathメソッドに渡して、可能な書き換えを探します。 2番目はあなたの電話からです。下記の回答を参照してください。 –

答えて

4

あなたの質問はまだ少し不明なので、この回答はあなたが見ている特定の問題に対処できない可能性があります。

Magentoのコアチームは、この種のことを何年も伝えていませんでしたが、loadByRequestPathは「プライベートAPI」と考えられています。 OOPの意味ではなく、 "これはコアシステムの機能を実装するためのメソッドであり、おそらく動作しないと思うようには動作しないので、あなた自身の責任で使用してください。

あなたが書き換えオブジェクトストアIDが設定されていませんので、

​​

は、Magentoののデフォルトのインストールでは動作しません使用しようとしているPHPコード。このようなことをしようとするとうまくいくはずです。 loadByRequestPath方法は、書き換えが既に店舗IDが設定されていることを前提とし

$productRewrite = Mage::getModel('core/url_rewrite'); 
$productRewrite->setStoreId(1); 
$productRewrite->loadByRequestPath($product->getUrlPath()); 

(「1」のIDを有しており、当該製品は、その店舗に存在することをインストールストアオブジェクトと、サンプルデータを想定) 、それはMagentoのより大きい部分のdispatching processの一部です。 (Magentoのルーティングシステムでの書き換えの役割を説明する記事への自己リンク)

すべてのことは、あなたが記述している問題は多少混乱していると言いました。あなたは

Zend_Debug::dump($path); 

戻り

私はあなたが何句「私のモジュールへのパスを」知っている確信している間、私のモジュール

へのパスを含む配列と言いますつまり、大きなマゼンタの世界では意味のない用語です。リテラル値についてより具体的にすることは、人々があなたが意味するものを理解するのに役立ちます。

また、あなたはまた、

が、私は$製品 - > getUrlPath()が正しいパスを返すことを確認したと言います。

「正しいパス」の値は明確ではありません。

私の推測では、Zend_Debug::dumpであなたが見ているパスになりますが$product->getUrlPath()を使用して標準の発送とないあなたの後の呼び出しの一部として通じて来る呼び出しです。しかし、あなたの質問に明快さがないと、それは伝えにくいものになります。

店舗IDを設定しても目的のものが得られない場合は、コードをどのように実行しているか、表示される内容についての完全な説明で質問を更新してください。その情報により、より多くの人々があなたを助けることができるでしょう。

+0

すばらしいアラン!面白いですが、私はストアIDが設定されていないと仮定していました。私はそれを設定しました。ただ、私はメソッド連鎖でそうしました。あなたのソリューションは完全に機能しました。乾杯。 –