マルチストア製品は(ストア1)(ストア2)レビューフォームを表示する(ストア1)のみを有効にする

magento.stackexchange https://magento.stackexchange.com/questions/16342

質問

これがバグなのか、私の構成のあるものなのかはわかりません。

1つのMagentoに1つのデータベースがインストールされており、2つのストアを実行しています。

一部の製品は(ストア1)でのみ有効になり、これらは(ストア1)の下にのみ表示されます。ただし、分析を通じて、/Review/Product/List/ID/NNNページから来る404ページのページを見つけました。 (製品はかつて存在していて、サイトマップに存在していたので、これが私の注意を引く理由と方法になります)。

Product Review Formページからリンクをクリックすると、404が見つかっていないページが予想されるので、私の質問はなぜこの製品の多くがまったく表示されるのですか?製品レビューテンプレートはすべて、製品の表示を既に許可していないのと同じテンプレートから来ているように見えるので、これがルーティングURLがコード自体を示すものを制御するルーティングですか?

値を出力しても $_product = $this->getProduct(); 私は製品に関する情報を取得します、そして、情報は、すべてのアカウントが存在しないでください。

役に立ちましたか?

解決

ああ、これは奇妙なものです、それは「バグ」またはおそらく、製品がレビューでいつ表示されるべきかについての意見に単なる「違い」があるように見えます。

製品ビュー

したがって、現在、カタログ製品ビューページが使用しています Mage_Catalog_Helper_Product 製品の開始とレンダリングを支援します。いいね、それはいくつかの良いチェックをします。

$product = Mage::getModel('catalog/product')
    ->setStoreId(Mage::app()->getStore()->getId())
    ->load($productId);
if (!$this->canShow($product)) {
    return false;
}
if (!in_array(Mage::app()->getStore()->getWebsiteId(), $product->getWebsiteIds())) {
    return false;
}

Canshow機能が深く調べたときの機能は、の結果を単純に返します $product->isVisibleInCatalog() && $product->isVisibleInSiteVisibility() 製品は正しくロードされています。

今、これはすべてうまく機能しているようです、Magentoは良い仕事です。

レビューリスト

それでは、レビューリストがどのように行うか見てみましょう。

まず、同じヘルパーを使用しません。これは、製品を表示できるかどうかをチェックするなど、多くの重複コードを制限するためにこれを制限するために少し奇妙です。これはここで見ている問題のようです。 (

だから私たちはそれが何をしていないかを知っているので、それが何をしているのかを確認しましょう。

さて、それは次のチェックで許可されている製品を分類します:

if (!$product->getId() || !$product->isVisibleInCatalog() || !$product->isVisibleInSiteVisibility()) {

以前にヘルパーのCanshow機能で見たことがありますが、悲しいことに、それがすべてチェックされているため、ウェブサイトをさらにチェックしません。これが実際にバグなのか、それとも望ましい結果なのかはわかりませんが、それは単に整理するためだけであるはずです。

修理

これを修正するためには、かなりシンプルであるように見えます。幸いなことに、引っ掛けることができる2つのイベントがあります。どちらも解雇されます Mage_Review_ProductController::_initProduct.

Mage::dispatchEvent('review_controller_product_init', array('product'=>$product));
Mage::dispatchEvent('review_controller_product_init_after', array(
    'product'           => $product,
    'controller_action' => $this
));

したがって、これらのイベントのいずれかで動作し、製品に添付されたWebサイトをチェックするオブザーバーを作成することをお勧めします。 clearInstance

他のヒント

Admin Catalog-> [製品の管理]に移動します。ここで、ストア2で見られる製品を見つけます。両方のウェブサイトで製品を有効にすることを確認してくださいenter image description hereこの画面では、Webサイト列のDiamond Storeディスプレイのみを参照してくださいので、製品はダイヤモンドストアでのみ表示されます。他の店では、この製品を見ることができません

単一製品でマルチサイトが見つかった場合は、削除します。 goto編集製品 - >ウェブサイトタブ - >クリックを削除して、他のストアから無効にします。 (表示する場所のみを保存します)。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top