2011-01-31 7 views
1

私の開発ウェブサイトには、各項目の在庫レベルを示す交通信号表示システムがあります。 これらの単純な製品の中に、私はいくつかのバンドル製品を持っています。 商品リスト(および詳細)ページでは、バンドルに含まれるすべての商品が在庫されている場合でも、在庫画像は常に赤色または在庫切れに表示されます。バンドル商品の在庫カウンタを表示しない

これを回避するには、すべてのバンドル製品の在庫画像を非表示にするしかありません。

誰でもこれを行う方法を知っていますか? バンドルされている商品type_idに基づいて在庫グラフィックを表示する(または表示しない)コードでテストを実行するにはどうすればよいですか?

私の心配は、ページを表示する前に各製品をテストするというオーバーヘッドが増えるため、これは素晴らしいアイデアではないということです。

その他のご提案は歓迎されます。 乾杯!

答えて

1

これはこれまで考えられていたよりもはるかに単純です。 次のコードは、製品が「バンドル」タイプであるかどうかをチェックし、在庫カウンタを条件付きで表示します。

<?php if($_product->getTypeId() != "bundle"): ?> 
[Stock counter display code here] 
<?php endif; ?> 

これを探している人に役立つことを願っています。

1

デフォルトのテーマを見ると、バンドルにはMage_Bundle_Model_Product_Type::isSalable()をチェックする在庫状況を示すテンプレートがあります。これは、すべてのコンポーネント製品をロードして個別にチェックする高価な操作を既にしています。また、価格もコンポーネントをロードする同様の方法で動作します。これは大きなEAV操作であるため、コストがかかります。私が取り組んでいる中で最も遅い店の中には、特にバンドル/設定可能な製品がたくさんありました。

作業はすでにデータベースによって行われており、ロードされた製品をループすることでもう一度在庫を確認することはおそらく大したことではありません。あなたはCatalogCacheのようなものを使って影響を制限することができます。

残念ながら私は在庫量のイベントが表示されないので、を独自のgetStockQty()メソッドで拡張して適切なルックアップと計算を行う必要があります。

株価表示をすでに変更している場合は、template/bundle/catalog/product/view/type/bundle.phtmlファイルに記録されています。バンドルの在庫レベルを隠す最も簡単な方法が必要な場合は、そこから「信号灯」を削除してください。これは他の製品タイプには影響しません。

+0

この返事をありがとう、これを長らく残してお詫び申し上げます! 在庫レベルの表示を一時的に無視しましょう - リスティングページテンプレートで商品データの一部を非表示にして、ループ内の各商品をテストしてから表示する必要があるとします。 実行するテストでは、製品がバンドル製品であるかどうかを判断する必要があります。私はprodyctタイプごとにtype_idがあると信じていますが、ここに質問があります: どのように各製品のtypeidをチェックしますか? getTypeID()関数のようなものはありますか? – robgt

+0

Magentoのほとんどのオブジェクトはマジックゲッターを使用しているので、明示的な関数がなくても 'getTypeId()'を使って 'type_id'の値を見つけることができます。これは 'setTypeId()'と他のセッターにも当てはまります。名前の変換は[camelCase](http://en.wikipedia.org/wiki/CamelCase)です。 – clockworkgeek

関連する問題