web-dev-qa-db-ja.com

privatemsgで送信されたメッセージの表示をカスタマイズするにはどうすればよいですか?

使用例:ユーザーがプライベートメッセージ( privatemsg モジュールから)を表示しているときに、以下を表示したいと思います。

  • ユーザーのプロファイルの画像フィールド(ユーザーのプロファイル画像ではない)
  • ユーザーにフラグを付けるためのリンク(潜在的な乱用を報告するため)

送信者には受信者の値が表示され、受信者には送信者の値が表示されます。これを実装するにはどうすればよいですか?

これまでにわかったこと:

そのままでは、privatemsgは Panels でオーバーライドできません。 Panelizer プロジェクトもペインを追加できません。いくつかの作業が行われた Privatemsg Panels サンドボックスプロジェクトがありますが、より主流で保守可能なソリューションが必要です。

PrivatemsgビューのD7バージョンでの作業は現在停止しています。

1
Patrick Kenny

pm_existing_pages プラグインを介して Privatemsg Panels プラグインに D7 Patch を実装したところ、非常にうまく機能しました! Drupal 7の場合、以下のようになります。

  • privatemsg_panels modulemasterブランチ を取得し、モジュールディレクトリにアップロードします
  • Patch Manager は非常に便利です-インストールして panels_privatemsg7.patch ファイルを実行し、モジュールを7.xブランチにアップグレードします(または手動でパッチを適用するか、drushまたはEclipseなど)
  • オプション: PM Existing Pages をインストールし、新しいパネルでデフォルトの/ messages /パスを上書きして追加します。もちろん、同じように簡単に新しいパネルページを作成することもできます。
  • コンテンツをパネルに追加します-Privatemsgはメニュー項目になりました: enter image description here
  • ここの説明 から素敵な小さなカスタムリンクブロックを作成します-特定のビューに役立つかもしれません!
  • オプション: privatemsg-view.tpl.php をオーバーライドして、よりカスタムなレイアウトにします。私はまだこれまでのところ十分に持っていません、私がそれに打撃を与えるときこれを更新することを忘れないようにしようとします。

編集-情報を追加します!

  • オーバーライド privatemsg-view.tpl.php はうまく機能します。ファイルをテーマフォルダに追加した後は、必ずキャッシュをクリアしてください。
  • Privatemsg Theming Documentation をご覧ください。 phptemplate _で始まるすべての関数は、独自のテーマでオーバーライドできます。例:これをtemplate.phpファイルにドロップします

    _function YOURTHEMENAME_privatemsg_list_field__participants($variables) {
        $thread = $variables['thread'];
        $field = array();
    
        if ($thread['has_tokens']) {
            $message = privatemsg_message_load($thread['thread_id']);
        }
        if (!isset($message)) {
            $message = privatemsg_message_load($thread['thread_id']);
        }
    
        $participants = _privatemsg_generate_user_array($thread['participants'], -4);
    
        $field['data'] = theme('user_picture', array('account' => $message->author));
        $field['data'] .= '<div class="user-name">'. _privatemsg_format_participants($participants, 3, TRUE).'</div>';
    
        $field['class'] = 'privatemsg-list-participants';
    
        return $field;
    }
    _

    これにより、ユーザーの画像が受信者フィールドに追加されます。驚くばかり!オーバーライドされた機能ごとに、3つのものが返されることを期待していることを覚えておいてください。フィールド、ヘッダーテーマパターン、フィールドテーマパターン-ドキュメントでは、私よりもよく説明されています;)

  • Privatemsg Theming Documentationtheme _で始まる関数は、function YOURTHEMENAME_form_alter()フックを使用してオーバーライドできます。この関数をtemplate.phpに追加する場合は、dsm($form_id); dsm($form);をドロップして、使用しているフォームを正確に把握してください。
  • 列の順序を変更したいですか?思ったより簡単です。/admin/config/messaging/privatemsgでドラッグアンドドロップ列の順序を確認してください。

カスタム列を出力に追加する方法については少し議論がありましたが、まだそこにはいません。そのためには Privatemsg Issue Queue を指摘する必要があります。

幸運を!

2
emc

うん、Privatemsgは実際にはビューやパネルの世界と統合されていません。

ただし、これを実装するのに十分なフックとテンプレートがあります。 privatemsg_message_view_alter() を使用して、メッセージボディにレポートリンク(例としてpm_block_user.moduleを参照)などを追加できます。また、 privatemsg-view.tpl.php テンプレートファイルをオーバーライドして、全体をカスタマイズできます。

1
Berdir