トークンモジュールを使用して、パーソナライズされた電子メール通知を印刷しています。 Webformコンポーネントが入力されず、電子メール通知がトークンの前に空のスペースを残すことがあります。 Rules モジュールを使用してメールを送信しています。
例えば。
[data:title-value-raw] [data:name-value-raw]
デフォルトの出力
Mr. Example
期待される結果
Example
実際の結果
Example
最初のトークンが空の場合、スペースを非表示にするにはどうすればよいですか?
メッセージを送信するためのDrupalルール。
{ "rules_mail_confirmation" : {
"LABEL" : "Mail Confirmation",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "contact" : "contact" } } } },
{ "node_is_webform" : { "node" : [ "node" ] } }
],
"DO" : [
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "[data:title-value-raw] [data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]"
}
}
]
}}
返信ありがとうございます。あなたの答えは私にとって本当に役に立ちました。単純なルールアクションでスペースを非表示にするには、それほどの労力が必要だとは思いませんでした。値をチェックするカスタムphpコードnoneで2つのルールを使用することになりました(そう、完璧ではありません)。今、テキストフィールドの代わりに、select options
をWebフォームコンポーネントとして使用しています。よりエレガントな解決策を見つけたら、遠慮なく共有してください。
ここに私のために働くものがあります。
none|
を追加しましたif ($data['components']['title']['value'][0]=='none') {
return TRUE;
} else {
return FALSE;
}
ルール1:タイトルなし
{ "rules_mail_confirmation_without_title" : {
"LABEL" : "Mail Confirmation without Title",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules", "php" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "contact" : "contact" } } } },
{ "node_is_webform" : { "node" : [ "node" ] } },
{ "php_eval" : { " if/else code from above " } }
],
"DO" : [
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "Hello [data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]"
}
}
]
}
}
ルール2:タイトルあり
{ "rules_mail_confirmation_with_title" : {
"LABEL" : "Mail Confirmation with Title",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules", "php" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "contact" : "contact" } } } },
{ "node_is_webform" : { "node" : [ "node" ] } },
{ "NOT php_eval" : { " if/else code from above " } }
],
"DO" : [
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "Hello [data:title-value-html] [data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]"
}
}
]
}
}
これを実装する場合、一種のヘルパー関数として特別な(小さな)ルールコンポーネントを作成し、それを既存のルールでも使用します。その規則コンポーネントのclueは、そのパラメーターの1つに(あまり使用されない)「提供」機能です。以下の詳細...
次のような新しいルールコンポーネントを作成します(ルールエクスポート形式)。
{ "rules_create_email_body_prefix" : {
"LABEL" : "Create eMail body prefix",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : {
"title_value" : { "label" : "Title value", "type" : "text" },
"prefix_value" : { "label" : "Prefix value", "type" : "text", "parameter" : false }
},
"IF" : [ { "NOT data_is_empty" : { "data" : [ "title-value" ] } } ],
"DO" : [
{ "data_set" : { "data" : [ "prefix-value" ], "value" : "[title-value:value] " } }
],
"PROVIDES VARIABLES" : [ "prefix_value" ]
}
}
上記のルールコンポーネントの詳細:
title_value
を入力パラメーターとして使用します(使用法=パラメーター)。prefix_value
itの出力として(Usage = Provided)。title_value
の値が空でないことを確認します。prefix_value
の値をtitle_value
を介して提供された値と等しく設定し、その後にスペースを挿入します(注!)。ルールの更新されたバージョンを次に示します(これもルールのエクスポート形式です)。
{ "rules_mail_confirmation_with_optional_prefix" : {
"LABEL" : "Mail Confirmation with optional prefix",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "webform_rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "contact" : "contact" } } } },
{ "node_is_webform" : { "node" : [ "node" ] } }
],
"DO" : [
{ "component_rules_create_email_body_prefix" : {
"USING" : { "title_value" : "[data:title-value-raw]" },
"PROVIDE" : { "prefix_value" : { "prefix_value" : "Prefix value" } }
}
},
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "[prefix-value][data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]",
"language" : [ "" ]
}
}
]
}
}
これらは私が適用した変更です(ルールと比較して):
[data:title-value-raw]
はtitle_value
パラメータに渡されます)。prefix_value
を使用するように、電子メールのメッセージ本文を適合させます。完了するには:ルールコンポーネントのルール条件が満たされない場合、prefix_value
の値は空です。それ以外の場合、ルールコンポーネントは、title_value
の後にスペースが続く値を割り当てます。メモ:
質問の最初のリビジョン に含まれるエクスポートされたルールには、いくつかのエラー/課題が含まれています。
使用 ルール条件モジュール 、最初のアクション:条件を追加、IFを追加、「データ値が空」、フィールド:[データ:[データ:タイトル値-未加工]、ここではコンテンツのみトークンが空の場合、メッセージトークンの値を避け、アクションを追加します。
"DO" : [
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "[data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]"
}
}
]
eLSEを「条件付き」で追加します。ここでは、トークン値が空ではないコンテンツを使用しているため、メッセージにトークン値を含め、ELSEの下にアクションを追加します。
"DO" : [
{ "mail" : {
"to" : "[data:email-value]",
"subject" : "Confirmation",
"message" : "[data:[data:title-value-raw] [data:name-value-raw],\r\n\r\n",
"from" : "[site:mail]"
}
}
]
完了しました。お役に立てば幸いです。
編集:別のモジュールをインストールしたくない場合は、2つのルールを作成し、最初のルールで条件を追加します:「データ値が空です」、フィールド:[データ:[データ:タイトル値-生]、メッセージ回避を設定メッセージの空のトークン値。 2番目のルール:「データ値は空です」、NEGATE、フィールド:[データ:[データ:タイトル値-未加工]、トークンを含む完全なメッセージ。今回はトークンは空になりません。
探しているアクションは trimming と呼ばれます。文字列の先頭(および末尾)から空白を取り除きます。
ただし、そのためには、まず2つのフィールドを1つにマージする必要があります。メールがAdd a variable
のアクションを追加する前に、値[data:title-value-raw] [data:name-value-raw]
を指定します(データセレクターなし、直接入力モードのみ)。また、後でわかりやすい名前を付けます。
これで、Mr. Example
または[whitespace]Example
を含むトークンが1つ作成されました。この1つのトークンから空白を削除することで、目的の結果を得ることができます。 (個々のトークンから空白を削除しても違いはありません。)デフォルトでは、ルールはTrimアクションを提供しませんが、 Rules Data Transforms は提供します。以前に作成したフィールドのトリムアクションを追加し、トリムされた出力をメールで使用します。