新しく作成したノードにアップロードされたファイルのリストをメールで送信しようとしています。
コンテンツタイプには、無制限の値を許可するファイルフィールドがあります。
Rules 内で、現在のアイテム「current_file」を呼び出すループを作成しました。
すべての値を「file_list」と呼ばれる1つの長いテキストフィールドに連結しようとしています。
メールの本文で「file_list」の値にトークンを使用するつもりです。
残念ながらできません。
データ選択モードでは、ループによって作成されたトークンにアクセスできます。
ただし、直接入力モードでは、トークンを使用できません。それらは、「置換パターン」セクションにリストされていません。
次の値を入力しようとすると、成功しません。
[node:field-file-list]
[current-file:file:url]
直接入力モードでトークンを使用できるようにするにはどうすればよいですか?
これを間違って行っている場合、各ファイルのすべてのURLを連結して、電子メールアクションの本文に入れることができる別の方法はありますか?
この回答は、読者が Rules モジュールの使用に関する基本的な知識を持ち、ループを使用して無制限の許可された入力でフィールドのすべての値を返す方法を理解していることを前提としています。
(また、これは新しく作成されたノードでの反応のみをカバーします。)
したがって、主な問題は、「直接入力」モードではルールのループ変数を使用できなかったことですが、「データ選択」モードを使用できました。
無制限の値のファイルフィールドのすべてのファイル名とファイルURLを連結し、長いテキストフィールド(フィルターされたHTML)の順序付けされていないHTMLリストに出力する必要がありました。
これを行うにはもっと良い方法があるかもしれませんが、これが現在私がこの仕事をする唯一の方法でした。
ループ変数トークンは直接入力モードでは使用できないため、通常のフィールドトークンは使用できるため、ループ変数情報を新しいフィールドに入れて、それらを連結します。
次のフィールドを作成します。
上記のフィールドでは、最初と最後のフィールドのみがユーザーに表示されます。残りはフィールド許可モジュールで非表示にする必要があります。
追加のフィールドは、Rulesモジュールで使用されるだけです。
このファイルフィールドには無制限の入力があるため、ループを作成して[ファイル]フィールドを選択します。
ループで現在のファイルに「current_file」という名前を付けました。
新しく作成されたループ内で、「データ値を設定する」アクションを作成します。新しく作成されたファイル名フィールドを取得し、現在のファイルのファイル名の値を取得します。
直接入力モードではないことを確認してください。そうしないと、トークンを使用できなくなります。
この手順は、最後の手順と似ています。
新しく作成されたファイルURL /パスフィールドの「データ値の設定」に別のアクションを追加します。現在のファイルのファイルURLからデータを取得するように設定します。
ここでも、直接入力モードになっていないことを確認してください。そうしないと、トークンを使用できなくなります。
最後に、[プレーンテキストファイルリスト]フィールドで、値を連結します。
最初に現在のフィールドを表すトークンを入力し、その下に現在のファイル名とパスを追加します。
今回は、直接入力モードにして、好きなように入力できるようにしてください。
これがループの外にあることを確認してください。
値の周囲にulタグを追加するデータ値を設定するアクションを追加します。
データ値を設定する別のアクションを追加します。プレーンテキストファイルリストの値を[フィルターされたHTMLファイルリスト]フィールドに入力します。
2つの異なるファイルリストフィールドが作成された理由は、フィルターされたHTMLフィールドでの連結が何らかの理由で機能しないためです。
すべての手順を実行すると、ファイルのURLにリンクされている、アップロードされた各ファイルの順不同のHTMLリストが表示されます。
これははるかに少ない手順で達成できるはずですが、これが問題を解決できる唯一の方法でした。
あなたが探しているものが利用できない場合は、それを利用可能にしてください。それは「各ファイルのすべてのURLを連結する別の方法(質問のように)です。詳細については、以下をお読みください...
このルールの例(ルールのエクスポート形式)をご覧ください。これは、求めているもののバリエーションです。
_{ "rules_show_list_of_fields" : {
"LABEL" : "Show list of fields",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "node_insert" : [], "node_update" : [] },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "article" : "article" } } } }
],
"DO" : [
{ "variable_add" : {
"USING" : { "type" : "text", "value" : "StartOfList-" },
"PROVIDE" : { "variable_added" : { "email_list" : "List of eMail IDs" } }
}
},
{ "LOOP" : {
"USING" : { "list" : [ "node:field-email-addresses" ] },
"ITEM" : { "current_email" : "Current eMail" },
"DO" : [
{ "data_set" : {
"data" : [ "email-list" ],
"value" : "[email-list:value][current-email:value]-"
}
}
]
}
},
{ "data_set" : { "data" : [ "email-list" ], "value" : "[email-list:value]EndOfList" } },
{ "drupal_message" : { "message" : "The value of the email_list variable is: [email-list:value]." } }
]
}
}
_
このルールの機能の概要は次のとおりです。
email_list
_を追加します。email_list
_値を初期化します。email_list
_値にサフィックスを追加します。私の場合、電子メールIDを含むマシン名_field_email_addresses
_の複数値のテキストフィールドを使用していて、「_-
_ "、およびプレフィックス(= StartOfList
)/サフィックス(= EndOfList
)を付けます。また、ルールイベントの「既存のノードを更新」も使用します。
マイリストフィールドのマシン名をリストフィールドに置き換え、すべての「eMail」を「ファイル」に置き換えます。自分のサイトにこのルールをインポートできるはずです(ルールUIが有効になっている場合)。
接頭辞または接尾辞、および/または区切り文字(= "_-
_")が必要かどうかは不明です。必要に応じて、これらのいずれかを適応または削除してください。
ボイラ ...
これは、新しいノードを作成した後、または既存のノード(Articleタイプ)を更新した後のStatusメッセージの外観です。
Email_list変数の値は、StartOfList-user2 @ example.com-user4 @ example.com-EndOfListです。