web-dev-qa-db-ja.com

トークンの出力のフォーマット

私はDrupal Commerceを持っており、商品の販売後に確認メールを送信します。これらのメールにはトークンがあります。トークンがあります[commerce-order:created]そして、その日付のフォーマットを変更する便利な方法があるかどうか興味があります。

2
Łukasz Zaroda

_[commerce-order:created]_が日付トークンの場合、_[commerce-order:created:custom:<the format you want to apply>]_を使用できます。ここで、_<the format you want to apply>_は date() が受け入れる文字列形式です。

それ以外の場合、他のモジュールによって実装されたトークンを変更するより一般的な方法は、実装 hook_tokens_alter() です。

_function mymodule_tokens_alter(&$replacements, $context) {
  $options = $context['options'];

  $sanitize = !empty($options['sanitize']);
  $langcode = !empty($options['language']->language) ? $options['language']->language : NULL;

  if ($context['type'] == 'commerce-order') {
    foreach ($context['tokens'] as $name => $original) {
      switch ($name) {
        case 'created':
          // Set a value for $sanitized and $new_value.
          $replacements[$original] = $sanitize ? $sanitized : $new_value;
      }
    }
  }
}
_

私のコードで:

  • _$sanitized_は、トークンに割り当てるサニタイズされた値で、_$sanitize_がTRUEの場合にのみ使用されます
  • _$new_value_はトークンの新しい値で、_$sanitized_の値を取得するために使用されます
1
kiamlaluno

hook_tokens_alter でこれを行うことができます

プレースホルダートークンの置換値を変更します。

例えば:

/**
* Implements hook_tokens_alter().
*/
function mymodule_tokens_alter(&$replacements,  $context){
  // May be you can do some more ifs to reduce the load :)
  if(isset($replacements['[commerce-order:created]'])){
    $replacements['[commerce-order:created]']  = check_plain('YOUR-CUSTOM-REPLACEMENT');
  }

}
0
niksmac