参照されるコマース製品のグリッドを作成する
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);
}
}?>
回答
これは、カスタムコードなしで、プレーンビューだけですぐに実行できます。秘訣は、ノードタイプが何であれ、そのコンテンツに基づいてビューを作成し、ノードからその製品参照フィールドによって参照される製品への関係を設定することです。ビューで製品フィールドを使用できるようになると、Commerce 1.xは、ビューにドロップするためのバリエーションごとの[カートに追加]フォームフィールドを提供します。
これを行うサンプルビューを作成し、製品表示ノードタイプのノードページのブロックに配置しました。コンテキストフィルターを使用してURLからノードIDを決定し、上記の関係を介して製品に参加し、製品のタイトル、価格、およびカートに追加フォームをグリッドに表示します。

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