ユーザーがプライベートメッセージを受信したときに通知を送信するように構成されたプライベートメッセージモジュールがあります。 Mime Mail モジュールを構成して機能させています。プライベートメッセージはHTMLとして送信され、適切に表示されます。しかし、メッセージにユーザーの写真を含める方法を見つけることができませんでした。
私のサイトには、ユーザーの写真を含むフィールドがあります(Drupalに組み込まれている標準のユーザーの写真は使用していません)。ただし、このフィールドを表示するようにユーザーの写真テンプレートを上書きしたので、ユーザーの写真で機能するソリューションが私のケースでもうまく機能するはずです。
これをトークンで解決しようとしました。
トークンモジュールは、次のトークンを使用可能にします。[privatemsg_message:author:field_acc_profile_picture]
ただし、このトークンをメッセージに含めると、単純にテキスト文字列として返されます。置換は行われません。
これはPHPで実行できると思いましたが、電子メールの通知メッセージフィールドにPHPを含めるように指示することはできません。
では、privatemsgモジュールが送信する電子メール通知にユーザーの写真を含めるにはどうすればよいですか?
これを実行する方法の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.
}
?>