この質問に関連して: 現在のユーザーがすでに購入している製品にマークを付ける方法は?
Drupal Commerce ショップがあります。ここでは Flag モジュールを使用して製品にマークを付け、ユーザーが特定の製品をすでに購入しているかどうかをユーザーに通知します。
現在、「チェックアウトプロセスの完了」でトリガーされるルール( Rules を使用)を作成して、購入されたすべての製品にフラグを立てようとしています。問題は、私が何をしても、ラインアイテムのcommerce_product
フィールド(製品参照フィールド)にアクセスできないことです。そのため、製品にフラグを付けるために必要な情報を見つけることができません。
誰かがこれを詳細に、できれば例を挙げて教えてくれませんか?
以下は、質問を解決するために使用できる可能なアプローチです。これは、チェックアウト時に一連のDrupalメッセージが表示された方法に関する詳細を提供します。これは、私が使用したこのテストケースに似ています(3つのラインアイテムが入ったカートの場合):
Current line item has label 'USB-BLU-08' and id '17'
Some details about this product: Product ID = 28, Product SKU = USB-BLU-08, Product Title = Storage 1, Product Creator = Hillary.Trump
Current line item has label 'TSH4-BLK-MD' and id '18'
Some details about this product: Product ID = 53, Product SKU = TSH4-BLK-MD, Product Title = Tshirt 4, Product Creator = Donald.Clinton
Current line item has label 'MES1-BLU-OS' and id '19'
Some details about this product: Product ID = 2, Product SKU = MES1-BLU-OS, Product Title = Messenger Bag 1, Product Creator = Pierre.Vriens
これを機能させるために、カスタムルールコンポーネントを実行するカスタムルールを作成しました。それらについての詳細を読んでください...
次のようなルールコンポーネントを作成します(ルールUIを使用して自分のサイトにインポートします)。
{ "rules_perform_an_action_on_a_selected_line_item" : {
"LABEL" : "Perform an action on a selected line item",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "selected_line_item" : { "label" : "Selected Line Item", "type" : "commerce_line_item" } },
"IF" : [
{ "entity_has_field" : { "entity" : [ "selected-line-item" ], "field" : "commerce_product" } }
],
"DO" : [
{ "entity_fetch" : {
"USING" : {
"type" : "commerce_product",
"id" : [ "selected-line-item:commerce-product:product-id" ]
},
"PROVIDE" : { "entity_fetched" : { "product_fetched" : "Fetched Product" } }
}
},
{ "drupal_message" : { "message" : "Some details about this product: Product ID = [product-fetched:product-id], Product SKU = [product-fetched:sku], Product Title = [product-fetched:title], Product Creator = [product-fetched:creator]" } }
]
}
}
それについていくつかの詳細:
selected_line_item
(=処理中のラインアイテム)。commerce_product
)。commerce_product
)ID(= selected-line-item:commerce-product:product-id
)。次のようなルールを作成します(Rules UIを使用して自分のサイトにインポートします)。
{ "rules_access_product_fields_at_checkout" : {
"LABEL" : "Access product fields at checkout",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "commerce_checkout" ],
"ON" : { "commerce_checkout_complete" : [] },
"DO" : [
{ "LOOP" : {
"USING" : { "list" : [ "commerce-order:commerce-line-items" ] },
"ITEM" : { "line_item" : "Current line item" },
"DO" : [
{ "drupal_message" : { "message" : "Current line item has label \u0027[line-item:line-item-label]\u0027 and id \u0027[line-item:line-item-id]\u0027" } },
{ "component_rules_perform_an_action_on_a_selected_line_item" : { "selected_line_item" : [ "line-item" ] } }
]
}
}
]
}
}
それについていくつかの詳細:
実際に質問に答えるには、つまり、各ラインアイテムの製品にフラグを付けるには、onlyステップ1のルールコンポーネント。その時点で各ラインアイテムのすべてのデータを使用できるため、ルールコンポーネントをニーズに合わせて調整する(つまり、現在のユーザーが製品にフラグを立てる)ことは簡単です。