まず、簡単な背景情報:
単一のD7コードベースで実行されている複数のサイトでprivatemsg 7.x-1.2を実行しています。 1つのデータベースにすべてのprivatemsgテーブルがあり、プライベートメッセージの同期を維持するために、すべてのサイトからアクセスされます。
その小さなセットアップを強化するために、挿入/保存時にメッセージ本文を操作して、「このメッセージは[サイト名]経由で送信されました」という行を各メッセージの最後に追加します。これは私が最初にそれを達成した方法です:
function global_privatemsg_message_presave_alter(&$message) {
$message->body .= "<div class=\"sent-via\">(". t("Sent via !site_link", array('!site_link' => get_site_link())) .")</div>";
}
入力フィルターが適用される前にhook_privatemsg_presave_alterが実行されるという事実を見落としたことを除いて、それはうまくいきました。そのため、ユーザーがメッセージを「フィルターされたHTML」または「プレーンテキスト」として送信すると、「送信済み」がスローされます。
したがって、私が探しているのは、メッセージボディにマークアップを追加する信頼できる方法です。または、入力フィルターによって変更されることなく、それに応じて入力できる新しいテンプレート変数を導入することさえできます(Drupalのcheck_markupの結果だと思います)。 。
できれば、PrivatemsgモジュールAPIの制約の範囲内でこれを完全に実行したいのですが、不可能を求めているのではないかと思います。
できますか?
(私はprivatemsgを使用していません)...しかし、D7の新機能のために実行可能であることを確認してください:
添付ファイルの代わりに、プライベートメッセージはフィールド化可能であり、任意の数およびフィールドの組み合わせをそれらに追加できます。
つまり、テキストfield_type
。次に、あなたのpresaveフックであなたはただ行うでしょう:
$message->sent_by_sitename = 'some_sitename_in_your_multisite_install';
次に、メッセージ表示を変更して、マークアップを追加し、「このメッセージの送信者」マークアップを導くカスタムフォーマッタを使用して、この新しいフィールドを表示します。
私はこれを手作業で行うコードを持っていません(おそらく約30行です)。 drupal-のデフォルトユーザーオブジェクトにカスタムフィールドを追加する同様のリクエストを次に示します-リクエストはprivatemsgに関して異なりますが、おそらく同じ関数のいくつかを引き続き使用します: add -properties-to-an-entity-hook-schema-alter
要するに: