「コメントAPI」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
(done.)
 
(同じ利用者による、間の34版が非表示)
1行目: 1行目:
{{Moodle 2.0}}
{{Moodle 2.0}}
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] ([[利用者・トーク:Mitsuhiro Yoshida|トーク]])


==目的==
==目的==
8行目: 6行目:


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


==概要==
==概要==
コメントAPIでは以下の機能を提供します:
コメントAPIでは以下の機能を提供します:
# コメントを追加すr
# コメント追加
# コメントを管理する
# コメント管理
# コメントを削除する
# コメント削除


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


==コメントAPIデータベーステーブル ==
==コメントAPIデータベーステーブル ==
{| class="wikitable"
{| class="wikitable"
|-
|-
54行目: 49行目:
| int(10)
| int(10)
|
|
| 例えばあなたはユーザプロファイルではユーザ説明または趣味をコメントできますが、これらは同じitemid (==userid) を共有しているため、comment_areaで分離する必要があります。
| 例えばあなたはユーザプロファイルでユーザ説明または趣味をコメントできますが、これらは同じitemid (==userid) を共有しているため、comment_areaで分離する必要があります。
|-
|-
| timecreated
| timecreated
73行目: 68行目:


==コメントAPIを使用する==
==コメントAPIを使用する==
===format_text関数にオプションを追加する===
===format_text関数にオプションを追加する===
このformat_text関数を使用した場合、テキスト末尾にコメントアイコンが自動的に追加されます:
このformat_text関数を使用した場合、テキスト末尾にコメントアイコンが自動的に追加されます:
89行目: 83行目:


===コメントクラスを使用する===
===コメントクラスを使用する===
コメントAPIを他の場所で使用する場合、以下のコードを使用してください:
他の場所でコメントAPIを使用したい場合、以下のコードを使用してください:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$options->area    = 'database_entry';
$options->area    = 'database_entry';
102行目: 96行目:
==コメントAPI概要==
==コメントAPI概要==
一般的にコメントAPIを動作させるためにあなたが知る必要のある関数は以下2つのみです:
一般的にコメントAPIを動作させるためにあなたが知る必要のある関数は以下2つのみです:
#comment::init (コメントAPIの初期化に使用する)
# comment::init (コメントAPIの初期化に使用する)
# $comment->output (コメントの表示に使用する)
# $comment->output (コメントの表示に使用する)


112行目: 106行目:


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


====output($return = false)====
====output($return = false)====
127行目: 121行目:


====delete($id)====
====delete($id)====
Delete a comment from database, used in comment/comment_ajax.php
データベースからコメントを削除します。これはcomment/comment_ajax.phpで使用されます。


====delete_comments====
====delete_comments====
Delete all comments in a specific contexts (like all comments belonging to a forum post)
特定のコンテクストのすべてのコメントを削除する (例: フォーラム投稿に付随するすべてのコメント)


==Javascript API==
==Javascript API==
Comment API implemented a YUI3 module M.core_comment to deal with the communication between browsers and moodle.
コメントAPIではブラウザとmoodle間の通信を処理するためにYUI3モジュールM.core_commentを実装しました。これはcomment/comment.js内にあります。
It can be found in comment/comment.js


Call M.core_comment.init will create an instance of CommentHelper class. You don't need to make any calls to this instance, it simply works out of box.
M.core_comment.initをコールした場合、CommentHelperクラスのインスタンスが生成されます。あなたはこのインスタンスに対して何かをコールする必要はなく、単にそのまま動作します。


== Moodle modules callback ==
== Moodleモジュールコールバック ==
Comment API allows modules/blocks/blog to decide how comments display.
Comment APIはモジュール/ブロック/ブログがコメント表示方法を決めれるようにできます。


=== データ妥当性検証 Data validation ===
=== データ妥当性検証 ===
This callback method is required, it must be implemented. Otherwise, new comment will be rejected by default.
このコールバックメソッドは必須であり、必ず実装する必要があります。そうでない場合、新しいコメントはデフォルトで拒否されます。プラグインはpluginname_comment_validateコールバックを実装して、コメントパラメータを検証する必要があります。また、検証に合格した場合、trueを返す必要があります。
Plugins must implement pluginname_comment_validate callback to validate comments parameters, it must return true to pass validation.


===パーミッションコントロール Permission control===
===パーミッションコントロール===
Modules must implement function '''pluginname_comment_permissions''' to return post and view permission.
モジュールには投稿許および閲覧許可を返す関数「pluginname_comment_permissions」を実装する必要があります。


Blocks need to overwrite '''blockname_comment_permissions''' function of block_base.
ブロックではblock_baseの「blockname_comment_permissions」関数を上書きする必要があります。


Blog need to implement '''blog_comment_permissions''' function.
ブログでは「blog_comment_permissions」関数を実装する必要があります。


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


=== 新しい追加コメントを確認する Check new added comment ===
=== 新しい追加コメントを確認する===
The callback function allows you to change the comment content before inserting into database or reject this comment.
コールバック関数により、あなたはデータベースに挿入する前にコメント内容を変更したり、このコメントを拒否できます。


It takes two arguments, the comment object which contains comment details, and $params which contains context and course information.
「コメント詳細を含むコメントオブジェクト」および「コンテキストおよびコース情報を含む$params」の2つの引数を取得します。


Modules can implement a function named '''modname_comment_add'''.
モジュールでは「modname_comment_add」という関数名の関数を実装できます。


Blocks need to overwrite '''blockname_comment_add''' function.
ブロックでは「blockname_comment_add」関数をオーバーライドする必要があります。


Blog need to implement '''blog_comment_add''' function.
ブロックでは「blog_comment_add」関数を実装する必要があります。


This function should return a boolean value.
この関数はブール値を返すべきです。


=== コメントをフィルタ/フォーマットする Filter/format comments ===
=== コメントをフィルタ/フォーマットする ===
This callback allows modules check/format comments when user request to display comments.
このコールバックはユーザがコメントの表示を要求した場合にモジュールによるコメントのチェックおよびフォーマットを可能にします。


It takes the same arguments as pluginname_comment_add
pluginname_comment_addと同じ引数を取得します。


Modules can implement a function named '''pluginname_comment_display'''.
モジュールには「pluginname_comment_display」という関数名の関数を実装できます。


Blocks need to overwrite '''blockname_comment_display''' function.
ブロックでは「blockname_comment_display」関数をオーバーライドする必要があります。


Blog need to implement '''blog_comment_display''' function.
ブロックでは「blog_comment_display」関数を実装する必要があります。


It will return the comment object.
これはコメントオブジェクトを返します。


=== コメントテンプレートを定義する Define a comment template ===
=== コメントテンプレートを定義する ===
Modules can implement a function named '''pluginname_comment_template''', which allow modules define a comment template.
モジュールは'''pluginname_comment_template'''という関数名の関数を実装できます。これはモジュールがコメントテンプレートを定義できるようにします。
The template must have 4 embedding variables, ___id___, ___content___, ___time___, ___name___, they will be replaced with html id, comments content, comment time and commenter name
 
テンプレートには4つの埋め込み変数___id___, ___content__, ___time__, ___name___を持つ必要があります。それらはhtml id、コメントコンテンツ、コメント時間、コメント投稿者名に置換されます。


== バックアップおよびリストア Backup and Restore ==
== バックアップおよびリストア Backup and Restore ==
Comments will automatically be included in the activity/course backups and restored provided the itemids can be updated during the restore process. To do this either:
コメントは自動的に活動/コースのバックアップに含まれます。リストア処理中に提供されたアイテムIDを更新できる場合、バックアップがリストアされます。これには以下のいずれかを実施してください:
 
* アイテムIDを使用せずにコンテキストにのみ依存する。
*commentareaをリストアのマッピングの1つと同じにする (set_mapping) または
* リストア活動クラスの関数「get_comment_mapping_itemname」をオーバーライドする。


* do not use item ids and rely just on the context
あなたがこれらいずれかを実施しない場合、コメントは復元時に無言で無視されます。
* make the commentarea the same as one of the mappings in the restore (set_mapping); or
* override the function "get_comment_mapping_itemname" in the restore activity class


If you do not do one of these the comments will be silently ignored on restore.


==関連情報==
==関連情報==
* [[コアAPI (Dev_docs)]]
* [[コアAPI (Dev_docs)]]
* MDL-19118 - Comment API issue
* MDL-19118 - コメントAPI問題


[[Category:API]]
[[Category:API]]


[[en:Development:Comment_API]]
[[en:Development:Comment_API]]

2023年5月19日 (金) 15:07時点における最新版

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」をオーバーライドする。

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


関連情報