コメントAPI

提供:MoodleDocs
移動先:案内検索

Moodle 2.0


目的

コメントAPIのゴールは以下のとおりです:

  • コメントを一元管理する
  • Moodle全体を通して、すべてのコメントに一貫したアプローチを適用する
  • コメントAPIを既存モジュールに簡単に統合できる
  • JavaScriptの有効有無に関係なく動作する

概要

コメントAPIでは以下の機能を提供します:

  1. コメント追加
  2. コメント管理
  3. コメント削除

また、ページを再読み込みせずにコメントを追加/削除するための派手なAjaxインターフェイスも提供します。

コメントAPIデータベーステーブル

フィールド タイプ デフォルト 情報
id int(10) auto-incrementing このコメントのユニークID
userid int(10) このコメントの投稿者
contextid int(10) コンテクストテーブルで定義された コンテクストID - コメントの所有者であるプラグインのインスタンスを識別します。
itemid int(10) プラグイン固有のアイテムID (例: フォーラム投稿、ブログエントリ、課題提出等)
commentarea int(10) 例えばあなたはユーザプロファイルでユーザ説明または趣味をコメントできますが、これらは同じitemid (==userid) を共有しているため、comment_areaで分離する必要があります。
timecreated int(10)
timemodified int(10)
content text コメントのコンテンツ

コメントAPIを使用する

format_text関数にオプションを追加する

このformat_text関数を使用した場合、テキスト末尾にコメントアイコンが自動的に追加されます:

例えばフォーラムモジュールで次のコードを使用した場合、すべての投稿にコメントアイコンが追加されます:

$cmt = new stdclass;
$cmt->contextid = $modcontext->id;
$cmt->area      = 'format_post';
$cmt->itemid    = $post->id;
$options->comments = $cmt;
echo format_text($post->message, $post->messageformat, $options, $course->id)."<hr />";

コメントクラスを使用する

他の場所でコメントAPIを使用したい場合、以下のコードを使用してください:

$options->area    = 'database_entry';
$options->context = $context;
$options->itemid  = $record->id;
$options->component = 'mod_data';
$options->showcount = true;
$comment = new comment($options);
$comment->output(false);

コメントAPI概要

一般的にコメントAPIを動作させるためにあなたが知る必要のある関数は以下2つのみです:

  1. comment::init (コメントAPIの初期化に使用する)
  2. $comment->output (コメントの表示に使用する)

コメントクラスはcomment/lib.phpに実装されています。

class comment()

__construct($contextid, $comment_area, $itemid))

クラスメンバを初期化します。

init()

コメントの初期化および言語設定に使用される静的関数です。HTMLのヘッダ表示の前に必ず呼び出されます。

output($return = false)

コメントインターフェースのHTMLスニペットをプリントします。$returnにtrueに設定した場合、プリントの代わりにHTML文字列を返します。

print_comments($params = array())

非JavaScriptのコメントインターフェイスで使用されます。コメントリストを表示します。

add($content)

コメントをデータベースに追加するパブリックインスタンス関数です。これはcomment/comment_ajax.phpで使用されます。

count()

コメント数をカウントします。

delete($id)

データベースからコメントを削除します。これはcomment/comment_ajax.phpで使用されます。

delete_comments

特定のコンテクストのすべてのコメントを削除する (例: フォーラム投稿に付随するすべてのコメント)。

Javascript API

コメントAPIではブラウザとmoodle間の通信を処理するためにYUI3モジュールM.core_commentを実装しました。これはcomment/comment.js内にあります。

M.core_comment.initをコールした場合、CommentHelperクラスのインスタンスが生成されます。あなたはこのインスタンスに対して何かをコールする必要はなく、単にそのまま動作します。

Moodleモジュールコールバック

Comment APIはモジュール/ブロック/ブログがコメント表示方法を決めれるようにできます。

データ妥当性検証

このコールバックメソッドは必須であり、必ず実装する必要があります。そうでない場合、新しいコメントはデフォルトで拒否されます。プラグインはpluginname_comment_validateコールバックを実装して、コメントパラメータを検証する必要があります。また、検証に合格した場合、trueを返す必要があります。

パーミッションコントロール

モジュールには投稿許および閲覧許可を返す関数「pluginname_comment_permissions」を実装する必要があります。

ブロックではblock_baseの「blockname_comment_permissions」関数を上書きする必要があります。

ブログでは「blog_comment_permissions」関数を実装する必要があります。

この関数は配列を返します: array('post'=>true, 'view'=>true)

新しい追加コメントを確認する

コールバック関数により、あなたはデータベースに挿入する前にコメント内容を変更したり、このコメントを拒否できます。

「コメント詳細を含むコメントオブジェクト」および「コンテキストおよびコース情報を含む$params」の2つの引数を取得します。

モジュールでは「modname_comment_add」という関数名の関数を実装できます。

ブロックでは「blockname_comment_add」関数をオーバーライドする必要があります。

ブロックでは「blog_comment_add」関数を実装する必要があります。

この関数はブール値を返すべきです。

コメントをフィルタ/フォーマットする

このコールバックはユーザがコメントの表示を要求した場合にモジュールによるコメントのチェックおよびフォーマットを可能にします。

pluginname_comment_addと同じ引数を取得します。

モジュールには「pluginname_comment_display」という関数名の関数を実装できます。

ブロックでは「blockname_comment_display」関数をオーバーライドする必要があります。

ブロックでは「blog_comment_display」関数を実装する必要があります。

これはコメントオブジェクトを返します。

コメントテンプレートを定義する

モジュールはpluginname_comment_templateという関数名の関数を実装できます。これはモジュールがコメントテンプレートを定義できるようにします。

テンプレートには4つの埋め込み変数___id___, ___content__, ___time__, ___name___を持つ必要があります。それらはhtml id、コメントコンテンツ、コメント時間、コメント投稿者名に置換されます。

バックアップおよびリストア Backup and Restore

コメントは自動的に活動/コースのバックアップに含まれます。リストア処理中に提供されたアイテムIDを更新できる場合、バックアップがリストアされます。これには以下のいずれかを実施してください:

  • アイテムIDを使用せずにコンテキストにのみ依存する。
  • commentareaをリストアのマッピングの1つと同じにする (set_mapping) または
  • リストア活動クラスの関数「get_comment_mapping_itemname」をオーバーライドする。

あなたがこれらいずれかを実施しない場合、コメントは復元時に無言で無視されます。


関連情報