web-dev-qa-db-ja.com

privatemsgモジュールが送信する電子メール通知にユーザーの写真を含めるにはどうすればよいですか?

ユーザーがプライベートメッセージを受信したときに通知を送信するように構成されたプライベートメッセージモジュールがあります。 Mime Mail モジュールを構成して機能させています。プライベートメッセージはHTMLとして送信され、適切に表示されます。しかし、メッセージにユーザーの写真を含める方法を見つけることができませんでした。

私のサイトには、ユーザーの写真を含むフィールドがあります(Drupalに組み込まれている標準のユーザーの写真は使用していません)。ただし、このフィールドを表示するようにユーザーの写真テンプレートを上書きしたので、ユーザーの写真で機能するソリューションが私のケースでもうまく機能するはずです。

これをトークンで解決しようとしました。

トークンモジュールは、次のトークンを使用可能にします。[privatemsg_message:author:field_acc_profile_picture]

ただし、このトークンをメッセージに含めると、単純にテキスト文字列として返されます。置換は行われません。

これはPHPで実行できると思いましたが、電子メールの通知メッセージフィールドにPHPを含めるように指示することはできません。

では、privatemsgモジュールが送信する電子メール通知にユーザーの写真を含めるにはどうすればよいですか?

1
Patrick Kenny

これを実行する方法の1つ(これはいくつかのサイトで私が行っていることです)は、カスタムモジュールにhook_privatemsg_message_insert()を実装することです。 privatemsgモジュールの電子メールまたはルールによって生成された電子メールをオフにし、代わりにプライベートメッセージを送信するカスタムコードを記述します。

私の場合、他のいくつかのカスタマイズを行う必要がありましたが、最も簡単なのは、$ message-> author-> uidからユーザー$ accountをロードすることにより、プロフィール画像のURLを取得することです。

簡単な例:

<?php
/**
 * Implements hook_privatemsg_message_insert().
 */
function custom_privatemsg_message_insert($message) {
  global $base_url;

  // Get the account from which message was sent.
  $account_from = user_load($message->author->uid);

  // Get the person to whom the message is being sent (I only handle one).
  foreach ($message->recipients as $key => $recipient) {
    $account_to = $recipient;
    continue;
  }

  // Set up variables for our message body.
  $variables = array(
    'from' => $account_from->realname,
    'link' => l('Click here to view/reply to this message', $base_url . '/messages/view/' . $message->thread_id, array('external' => TRUE)),
    'message' => check_markup($message->body, $message->format),
  );

  // Print the message body using a custom theme function. Because email clients
  // require obnoxious markup, it's best to use a theme function or template...
  $body = theme('custom_private_message', $variables);
  $body_plain = strip_tags($body);

  $subject = t('New Private Message: ') . $message->subject;
  $email_to = $account_to;
  $email_from = $account_from->realname . ' <' . $account_from->mail . '>';

  // Now, use whatever mechanism you want to send the actual email.
}
?>
2
geerlingguy