1

Magento 用に構築している特定のカスタム拡張機能についてサポートが必要です。バンドルされた製品タイプを「親」バンドル製品に関連付けることができる拡張機能を作成しました。

つまり、私は、デスクトップ コンピュータにバンドルされたバンドル製品「キーボードとマウス」を販売していたと考えてください。

管理者で作業しており、製品ビューに表示されています。しかし、この「デスクトップ コンピュータ」をショッピング カートに追加しようとすると、問題が発生します。/app/code/core/Mage/Bundle/Model/Product/Type.phpの下にある *_prepareProduct()* を呼び出す関数までたどることができました。

以下は、私が問題を見つけているコードのスニペットです。ご覧のとおり、selectionIds をダンプすると、製品ビュー ページから選択したオプションの配列が返されます。2 番目のダンプはselections->getItems です(この機能がどこにあるのかわかりません。フォーカスできません)。ただし、単純な製品 (つまり、キーボードとマウスを含むバンドル製品) のみを含む BUNDLE PRODUCT からこの DUMP を表示すると、selections->getItems(...)のデータ/オブジェクトが出力されます。バンドルされた製品を含むバンドルされた製品 (つまり、キーボードとマウスなどを含むバンドルされた製品を持つデスクトップ コンピューター) からこれをダンプすると、selections->getItems(...)に対して何も返されません。

            // If product has not been configured yet then $selections array should be empty
        if (!empty($selectionIds)) {
            $selections = $this->getSelectionsByIds($selectionIds, $product);

            var_dump($selectionIds);
            var_dump($selections->getItems());    
            // Check if added selections are still on sale
            foreach ($selections->getItems() as $key => $selection) {

「getSelectionsByIds」とそれをオーバーライドして、カートにアイテムを追加したときにバンドルされた製品の空のオブジェクトを返さないようにする方法を理解するのを手伝ってくれる人はいますか? getSelectionsById をオーバーライドする方法は知っていますが、関数が何も返さない原因がわかりません。

ありがとう

4

1 に答える 1

0

getSelectionsById()これは、他のモデル (すべて同じクラス) を含めるために使用されるモデルです強化された配列と考えてください。詳細については、こちらをご覧ください: Using Collections in Magento

PHP のいくつかのトリックにより、Magento コレクションは多くの場合、配列のように扱うことができます。たとえば、次のコードは機能します。

$productCollection = Mage::getModel('catalog/product')->getCollection();
foreach ($productCollection as $product) {
    // do stuff
}

それでも、コレクションから実際の PHP 配列を取得すると便利な場合があります。これには、 を使用しますgetItems()。これは、任意の Magento コレクション (具体的には、 を継承する任意のオブジェクトVarien_Data_Collection) で使用できるメソッドです。それをオーバーライドする理由はありません。コレクションオブジェクトが内部で保存および使用するプレーンな古い PHP 配列を返すだけです。ご覧のとおり、空想は何もありません。

/**
 * Retrieve collection items
 *
 * @return array
 */
public function getItems()
{
    $this->load();
    return $this->_items;
}

したがって、コレクションのgetItems()returnnullまたは空の配列の場合、コレクションにオブジェクトが含まれていないことを意味します。これは、コレクションに適用されたクエリが空の結果セットを返したことが原因であることがよくありますが、それがあなたの状況に当てはまるかどうかはわかりません.

あなたのコードが、与えられた情報を含むコレクションを返さない理由を具体的に言うのは難しいです。新しい製品タイプをどのように実装したか (どのクラスを作成したか、コア バンドル タイプをどのように拡張しているかなど) について、もう少し詳しく説明していただけると助かります。

于 2013-04-24T03:58:26.410 に答える