私は Drupal Commerce を使用していますDrupal 7サイトで、製品のディスプレイと製品を使用しています。
各商品には送料フィールドがあります。
チェックアウト時に、注文に含まれるすべての製品の送料を収集して表示する必要があります。
私のアプローチはこれです:私は Commerce Flat Rate モジュールを使用して、定額配送方法を作成します。次に、定額配送サービス「カスタム送料」を作成します。次に、注文の各製品のフィールド「カスタム送料」のフィールド値を取得する必要があるループを持つ「カスタム送料を適用」という新しい配送ルールを作成します。
質問:ルールは、ラインアイテムに関連付けられた製品のフィールド値を取得し、それを送料に追加する場合にどのように見えるべきですか?.
次のルール(ネストされている)は機能しません。ルールログを使用して、3番目のルールでは、エンティティにフィールドが渡されないことがわかりました。合計送料に追加する必要がある商品フィールド値を取得しようとします。
0.528 ms Evaluating the action component_rules_get_shipping_price_field_value. [edit]
" Evaluating rule get local shipping price field value. [edit]
0 ms Evaluating rule get local shipping price field value.
0.049 ms Evaluating conditions of rule get local shipping price field value. [edit]
0.11 ms The condition entity_has_field evaluated to FALSE [edit]
0.113 ms AND evaluated to FALSE.
0.123 ms Finished evaluation of rule get local shipping price field value.
================================================
{ "rules_apply_custom_product_shipping_costs" : {
"LABEL" : "Apply custom product shipping costs",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "commerce_shipping" ],
"ON" : { "commerce_shipping_calculate_rate" : [] },
"DO" : [
{ "drupal_message" : { "message" : "Calculating shipping rates." } },
{ "variable_add" : {
"USING" : {
"type" : "commerce_price",
"value" : { "value" : { "amount" : 0, "currency_code" : "USD" } }
},
"PROVIDE" : { "variable_added" : { "custom_shipping_cost" : "Custom shipping cost" } }
}
},
{ "component_rules_get_local_shipping_rate" : {
"price" : [ "custom-shipping-cost" ],
"line_item" : [ "commerce-line-item" ]
}
},
{ "component_rules_get_international_shipping_rate" : {
"price" : [ "custom-shipping-cost" ],
"line_item" : [ "commerce-line-item" ]
}
}
]
}
}
==================
{ "rules_get_local_shipping_rate" : {
"LABEL" : "Set local shipping rate",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "commerce_line_item" ],
"USES VARIABLES" : {
"price" : { "label" : "price", "type" : "commerce_price" },
"line_item" : { "label" : "line item", "type" : "commerce_line_item" }
},
"IF" : [
{ "data_is" : { "data" : [ "line-item:type" ], "value" : "shipping" } },
{ "data_is" : {
"data" : [ "line-item:commerce-shipping-service" ],
"value" : "local_shipping_rate"
}
}
],
"DO" : [
{ "drupal_message" : { "message" : "Start loop: collect line item local shipping price field values" } },
{ "LOOP" : {
"USING" : { "list" : [ "line-item:order:commerce-line-items" ] },
"ITEM" : { "lineitem" : "lineitem" },
"DO" : [
{ "variable_add" : {
"USING" : {
"type" : "commerce_price",
"value" : { "value" : { "amount" : 0, "currency_code" : "USD" } }
},
"PROVIDE" : { "variable_added" : { "custom_shipping_cost" : "custom shipping cost" } }
}
},
{ "component_rules_get_shipping_price_field_value" : {
"custom_shipping_cost" : [ "custom_shipping_cost" ],
"line_item" : [ "line_item" ]
}
},
{ "commerce_line_item_unit_price_add" : {
"commerce_line_item" : [ "line-item" ],
"amount" : [ "price:amount" ],
"component_name" : "flat_rate_local_shipping_rate",
"round_mode" : "1"
}
},
{ "drupal_message" : { "message" : "Single product shipping cost is" } },
{ "drupal_message" : { "message" : [ "custom-shipping-cost:amount" ] } }
]
}
}
]
}
}
==============
{ "rules_get_shipping_price_field_value" : {
"LABEL" : "get local shipping price field value",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : {
"custom_shipping_cost" : { "label" : "custom shipping cost", "type" : "commerce_price" },
"line_item" : { "label" : "line item", "type" : "commerce_line_item" }
},
"IF" : [
{ "entity_has_field" : { "entity" : [ "line-item" ], "field" : "commerce_product" } },
{ "entity_has_field" : {
"entity" : [ "line-item:commerce-product" ],
"field" : "field_shipping_rate_local_countr"
}
}
],
"DO" : [
{ "drupal_message" : { "message" : "line item has field commerce_product" } },
{ "data_set" : {
"data" : [ "custom-shipping-cost" ],
"value" : [ "line-item:commerce-product:field-shipping-rate-local-countr" ]
}
}
]
}
}
===========================編集次の問題が原因で問題が発生しました:このルール設定全体で、複数の変数をラインアイテムとして使用しました。ループ内のlineitem変数の代わりに、ループ外のlineitem変数を誤って使用しました。ある時点で、私はlineitemとline-itemを持っていて、それらを混同して機能しなくなりました。また、ループ内で変数として製品を追加する必要がありました。
以下はあなたの質問のこの(最も重要な?)部分に答える試みです:
次のルール(ネストされている)は機能しません。ルールログを使用して、3番目のルールでは、エンティティにフィールドが渡されないことがわかりました。合計送料に追加する必要がある商品フィールド値を取得しようとします。
product_related_to_item
」という名前を付けます。product_related_to_item
)を渡して、製品に関連するラインアイテムトークンを使用して3番目のルールを呼び出します(2番目のルールにそれがあることを確認してください)。product_related_to_item
の(同じ)フィールドを参照します(最初のルール条件がまだ必要かどうかわからないので、君は ...)。これらの修正を行うことにより、一般的なルールマジック(そのようなルール条件を追加した後)が再び適用されます。たとえば、後続のルールアクションでそれらの値を使用できます。そして、はい、私は知っています/実現します。これは、「これは意味がありません」または「基本的に同じことをしている」のようになります。少なくとも数日前、私が同じような問題に遭遇したとき、私は最初に自分自身について考えました。しかし、確かにこれが解決策でした(そして、ルールで「参照されたエンティティ(つまり、ラインアイテムで参照された製品)」を処理するときに、いくつかの制限と関係があることがわかりました。