画像、ブランド、および事前に編集ビューのカート/注文ビューに表示したいその他のコンテンツノード(製品バリエーションではない)にいくつかのフィールドがあります>関係、製品参照を追加でき、それにより、製品バリエーションからフィールドを追加しますが、コンテンツノードにあるフィールドを追加する方法が見つかりません
つまり、コンテンツタイプにある画像などのフィールドをカート/注文ビューに追加したいと思います。
良い回避策が見つかりました:
関係を追加すると、ビューで製品からフィールドを取得できます。
これは簡単ではありません。ラインアイテムにはノードへの直接参照がないためです。ノードURLをテキストフィールドに格納しますが、ビューの参照は行いません。各商品を参照する商品ディスプレイが1つしかないストアがある場合は、逆商品参照を使用して回避できます。つまり、ラインアイテムから始めて、商品を参照し、商品から逆参照を追加します。 「製品を参照するノード」その後、製品表示ノードからフィールドを追加できるはずです。
特定の製品を参照する複数の製品表示がある場合、このソリューションは機能しない可能性があります(もちろん、各ノードに、ビューに取り込む予定の同じフィールドが含まれていない限り)。
Commerce Kickstart 2を使用して、分類用語「product_sku」を作成し、その用語に画像フィールドを追加することで、これをある程度達成することができました。
次に、対応する画像を使用してすべてのベースSKUを作成しました。
「product_sku」という用語をバリアント型フィールドに用語参照として追加し、画像を抽出フィールドとして表示に追加しました。
新しいバリアントを作成するときは、画像をアップロードする代わりに、ドロップダウンリストからSKUを選択するだけです。
バリエーションがなくても何千もの製品がある場合、これは簡単に混乱する可能性があります。私は200ほどしか持っていませんが、それぞれに28 +/-バリアント(色)があり、それらのいくつかには追加のオプションがあります。
色見本にも同じ方法を使用したので、バリエーションの作成に関しては、製品の1つに対して120(?AUTO-VARIANT CREATOR?)、何もアップロードする必要がありません。これはコンテンツタイプでも機能します。カタログのメーカーやモデルの参照用語に使用したり、添付のロゴやモデルの画像を表示したりしています。
ビューでこれを実現するには、「Commerce Line item:Referenced products」という名前の関係を追加する必要があります。これにより、製品ノードからフィールドがフェッチされます。
私はこの方法でこれを行いましたカートビューを編集します(または、ビューでそれを行うことができますが、私の要件はカートビューにありました)製品参照への関係を追加します(製品IDを取得します)、ビューにphpフィールドを追加し、カスタムモジュールを追加したphpフィールドで呼び出します(パフォーマンスを向上させるためにキャッシュします:D)
function mymodule_get_nid_of_pid($pid){
if ($cache = cache_get('nid-product-' . $pid)) {
$data = $cache->data;
}
else {
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'products')
->fieldCondition('field_product_select', 'product_id', $pid)
->propertyCondition('status', 1)
->range(0,1)
->execute();
if(array_keys($result['node'])){
$data = current(array_keys($result['node']));
cache_set('nid-product-' . $pid, $data, 'cache', REQUEST_TIME + (3600 * 24 ));
}
return $data;
}