使用規則處理欄位集合項

使用規則處理欄位集合項很有趣,真的! 看一下這條規則(在規則匯出格式中):

{ "rules_calculate_sum_of_prices_in_all_field_collection_items" : {
    "LABEL" : "Calculate sum of prices in all field collection items",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_view--article" : { "bundle" : "article" } },
    "IF" : [
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_article_details" } }
    ],
    "DO" : [
      { "drupal_message" : { "message" : "\u003Cstrong\u003EDrupal calculator\u003C\/strong\u003E started ..." } },
      { "variable_add" : {
          "USING" : { "type" : "decimal", "value" : "0" },
          "PROVIDE" : { "variable_added" : { "total_price" : "Price total" } }
        }
      },
      { "LOOP" : {
          "USING" : { "list" : [ "node:field-article-details" ] },
          "ITEM" : { "article_details_item" : "Article details item" },
          "DO" : [
            { "data_calc" : {
                "USING" : {
                  "input_1" : [ "total-price" ],
                  "op" : "+",
                  "input_2" : [ "article-details-item:field-price" ]
                },
                "PROVIDE" : { "result" : { "calculation_result" : "Calculation result" } }
              }
            },
            { "data_set" : { "data" : [ "total-price" ], "value" : [ "calculation-result" ] } },
            { "drupal_message" : { "message" : "After adding a price of \u003Cstrong\u003E[article-details-item:field-price]\u003C\/strong\u003E for field collection item with id \u003Cstrong\u003E[article-details-item:item-id]\u003C\/strong\u003E, subtotal is \u003Cstrong\u003E[calculation-result:value]\u003C\/strong\u003E." } }
          ]
        }
      },
      { "drupal_message" : { "message" : "The \u003Cstrong\u003ETotal price\u003C\/strong\u003E for all prices included as field collection items is \u003Cstrong\u003E[total-price:value]\u003C\/strong\u003E." } },
      { "drupal_message" : { "message" : "\u003Cstrong\u003EDrupal calculator\u003C\/strong\u003E ended ..." } }
    ]
  }
}

關於這條規則的更多細節如下……

規則事件:

檢視內容(型別文章),使內容型別 article 的機器名稱適應任何適合(或使用任何其他適合的規則事件)。

規則條件:

實體具有欄位,而實體是節點,我的欄位集合欄位的機器名稱是 field_article_details(使此機器名稱適合任何適合,但請確保使用欄位集合欄位本身)。

規則行動:

醒來,這裡是魔術(好玩嗎?)將要發生的地方……這些是涉及的規則行動:

  1. Show a message on the site,有這樣的訊息:

Drupal 計算器開始……

  1. Add a variable,而它是一個名為 total_price 的變數,十進位制(2 位數),初始值 0。

  2. Add a loop,迭代我的欄位集合欄位的每個專案(機器名稱為 field_article_details),併為每次迭代執行以下規則操作:

  • Calculate a value,計算 total_price(在上面的規則行動 2 中定義)和 article-details-item:field-price(這是包含價格的欄位集合中的欄位的機器名稱,帶有 2 位數的小數)的總和,並將結果(總和)儲存在變數中 calculation_result

  • Set a data value,它只是複製儲存在我的 total_price 中的變數 calculation_result 中的值(在上面的規則操作 2 中定義)。備註:不確定(未經測試),但也許這個 calculation_result 變數可以直接替換為 total_price(在上一個操作中),因此你不需要此操作。

  • Show a message on the site,有這樣的訊息:

    為 ID 為 3 的欄位集合項新增 3.40 的價格後,小計為 15.00。

  1. Show a message on the site,有這樣的訊息:

包含在欄位收集專案中的所有價格的總價格為 26.23。

  1. Show a message on the site,有這樣的訊息:

Drupal 計算器結束了……

顯然,這個規則是一個原型。在確信它能夠正常工作之後,只需刪除所有規則操作即可 Show a message on the site。因此,只有第 2 項和第 3 項(沒有最後一個子項)留作規則操作。

開演時間 …

以下是我的測試結果示例,即顯示的 Drupal 訊息:

Drupal calculator started ...
After adding a price of 2.45 for field collection item with id 1, subtotal is 2.45.
After adding a price of 9.15 for field collection item with id 2, subtotal is 11.60.
After adding a price of 3.40 for field collection item with id 3, subtotal is 15.00.
After adding a price of 1.23 for field collection item with id 4, subtotal is 16.23.
The Total price for all prices included as field collection items is 26.23.
Drupal calculator ended ...

更多資訊

如果你不熟悉欄位集合,請嘗試首先消化“ 此問題 ” 的答案。