web-dev-qa-db-ja.com

最初のトークンが空の場合、ルールアクションでスペースを条件付きで非表示にする方法は?

トークンモジュールを使用して、パーソナライズされた電子メール通知を印刷しています。 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]"
    }
  }
]

}}

2
howdytom

返信ありがとうございます。あなたの答えは私にとって本当に役に立ちました。単純なルールアクションでスペースを非表示にするには、それほどの労力が必要だとは思いませんでした。値をチェックするカスタムphpコードnoneで2つのルールを使用することになりました(そう、完璧ではありません)。今、テキストフィールドの代わりに、select optionsをWebフォームコンポーネントとして使用しています。よりエレガントな解決策を見つけたら、遠慮なく共有してください。

ここに私のために働くものがあります。

  1. Webフォームの選択オプション内に、キーと値のペアnone|を追加しました
  2. Execute custom PHP codeを使用して新しいルール条件を作成し、値として次のコードを追加します。

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]"
        }
      }
    ]
  }
}
0
howdytom

これを実装する場合、一種のヘルパー関数として特別な(小さな)ルールコンポーネントを作成し、それを既存のルールでも使用します。その規則コンポーネントのclueは、そのパラメーターの1つに(あまり使用されない)「提供」機能です。以下の詳細...

パート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" ]
  }
}

上記のルールコンポーネントの詳細:

  • 2つのパラメーターを使用します:
    • itacceptstitle_valueを入力パラメーターとして使用します(使用法=パラメーター)。
    • itprovidesprefix_value itの出力として(Usage = Provided)。
  • このルールコンポーネントのロジックは次のようになります:
    • ルール条件:title_valueの値が空でないことを確認します。
    • ルールアクション:prefix_valueの値をtitle_valueを介して提供された値と等しく設定し、その後にスペースを挿入します(注!)。

パート2:既存のルールにルールコンポーネントを統合する

ルールの更新されたバージョンを次に示します(これもルールのエクスポート形式です)。

{ "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の後にスペースが続く値を割り当てます。

メモ

質問の最初のリビジョン に含まれるエクスポートされたルールには、いくつかのエラー/課題が含まれています。

  1. 構文エラーが含まれています。2番目のルール条件の最後にあるコンマは存在しないはずです(そのコンマを削除した後でのみ、ルールをインポートできました...)。

  2. 含まれている[data:[data:title-value-raw]]トークンに問題があるようです。[data:title-value-raw]であることを確認してください。適用した編集でも何らかの形で確認されています 質問のリビジョン6

  3. IMO「エクスポートされたルールの "REQUIRES"内に​​示されているように、 "---"は必要ありません。 質問のリビジョン6 で適用した編集でも何らかの形で確認されています。

2
Pierre.Vriens

使用 ルール条件モジュール 、最初のアクション:条件を追加、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、フィールド:[データ:[データ:タイトル値-未加工]、トークンを含む完全なメッセージ。今回はトークンは空になりません。

1
pinueve

探しているアクションは trimming と呼ばれます。文字列の先頭(および末尾)から空白を取り除きます。

ただし、そのためには、まず2つのフィールドを1つにマージする必要があります。メールがAdd a variableのアクションを追加する前に、値[data:title-value-raw] [data:name-value-raw]を指定します(データセレクターなし、直接入力モードのみ)。また、後でわかりやすい名前を付けます。

これで、Mr. Exampleまたは[whitespace]Exampleを含むトークンが1つ作成されました。この1つのトークンから空白を削除することで、目的の結果を得ることができます。 (個々のトークンから空白を削除しても違いはありません。)デフォルトでは、ルールはTrimアクションを提供しませんが、 Rules Data Transforms は提供します。以前に作成したフィールドのトリムアクションを追加し、トリムされた出力をメールで使用します。

0
Neograph734