参照されるコマース製品のグリッドを作成する

Aug 18 2020

Drupal7をCommerce1.xと一緒に使用しており、CommerceProductエンティティの参照フィールドを持つコンテンツタイプを作成しました。

次に、参照されている商品のグリッド、つまりノードページの各商品の専用のカートへの追加フォームをレンダリングしたいと思います。

少なくともこれまでのところ、それは不可能な作業のようです。ビュー、カスタムフォームテンプレート変数などを試してみましたが、常に次のようなエラーが発生します

注意:未定義のインデックス:関数form_process_radios()の#options(行3188

パラメータは、関数form_process_radios()(rivi 3188)でCountableを実装する配列またはオブジェクトである必要があります。

どういうわけか、複数の製品のオプション(デフォルトのフォーマット)を備えた無線要素を常に期待しています。しかし、それは私が望んでいることではなく、私はそれを隠し要素として設定しようとしました。フォームも見ることができますが、エラーを取り除き、これを「本で」作成したいと思います。

<?php
function mymodule_preprocess_entity(&$variables) { $variables['add_to_cart_form'] = '';

  if ($variables['elements']['#entity_type'] == 'commerce_product'){ $item = $variables['elements']['#entity']; if (empty($item->product_id)) {
        return;
      }

      $form_id = commerce_cart_add_to_cart_form_id([$item->product_id]);

      $line_item = commerce_product_line_item_new($item, 1, 0, [], 'custom_owner');
      $line_item->commerce_product = $item->product_id;
      $line_item->data['context']['product_ids'] = array($item->product_id);
      $line_item->data['context']['show_single_product_attributes'] = 1; $product_form = drupal_get_form($form_id, $line_item);

      // Trying to change from radio element to hidden
      $product_form['product_id']['#type'] = 'hidden'; unset($product_form['product_id']['#theme_wrappers']);
      unset($product_form['product_id']['#process']); $form_markup = drupal_render($formp); $variables['add_to_cart_form'] = array('#markup' => $form_markup);


  }

}?>

回答

1 RyanSzrama Aug 21 2020 at 01:38

これは、カスタムコードなしで、プレーンビューだけですぐに実行できます。秘訣は、ノードタイプが何であれ、そのコンテンツに基づいてビューを作成し、ノードからその製品参照フィールドによって参照される製品への関係を設定することです。ビューで製品フィールドを使用できるようになると、Commerce 1.xは、ビューにドロップするためのバリエーションごとの[カートに追加]フォームフィールドを提供します。

これを行うサンプルビューを作成し、製品表示ノードタイプのノードページのブロックに配置しました。コンテキストフィルターを使用してURLからノードIDを決定し、上記の関係を介して製品に参加し、製品のタイトル、価格、およびカートに追加フォームをグリッドに表示します。

製品のカートに追加フォームを介して追加されたラインアイテムは、ノードのコンテキストを維持しないことに注意してください。そのため、「Product Three」はカートにリンクとして表示されますが、TwoとOneは表示されません。この時点でこれらのフォームに適切なコンテキストがあることを確認するに、カスタムコード必要ですが、それは別の質問です。

あなたが視覚的な学習者である場合、これがこの作品を作るために私が構築したビューです: