開発:ブロック/付録B
Moodle 1.5以前のバージョンとのブロックAPIの違い
この付録では、Moodle 1.5に取り入れられたブロックAPIがどのように変わったのか説明します。また、Moodle 1.5との完全互換性を持つため、開発者がどのようなステップでブロックをアップデートする必要があるのか説明します。残念ですが、これらの変更で下位互換性が壊れてしまいます。これは、Moodle 1.4からのブロックが1.5で動作しないこと、またその逆も同じであることを意味します。
クラス命名規則が変わりました。
Moodle 1.4では、すべてのクラスはCourseBlock_somethingのような名称にする必要がありました。また、すべてのクラスが派生するベースクラスは、MoodleBlockでした。Moodleのオブジェクト指向の側面と一致させるため、これが変わったのがMoodle 1.5です (例えば、クラス enrolment_base、resource_base等があります)。新しいブロッククラスは、代わりにblock_somethingのように命名され、block_baseから派生します。つまり、Moodle 1.5互換性があるブロックを作成するには、あなたはクラス定義を、
class CourseBlock_online_users extends MoodleBlock { ... }
から
class block_online_users extends block_base { ... }
に変更する必要があることを意味します。
上記の例外は、任意のテキストを表示する代わりに、ブロックがアイテム一覧を表示する特別なケースです。この場合、ブロッククラスは、代わりに次のようにblock_listから派生すべきです:
class block_admin extends block_list { ... }
コンストラクタ VS init()
Moodle 1.4における、それぞれのブロッククラスでは、コースデータを引数として受けるコンストラクタの定義は必須でした (以下の例は、実際のオンラインユーザブロックからです):
function CourseBlock_online_users ($course) {
$this->title = get_string('blockname','block_online_users');
$this->content_type = BLOCK_TYPE_TEXT;
$this->course = $course;
$this->version = 2004052700;
}
対照的にMoodle 1.5において、コンストラクタは取り除かれ、あなたは、代わりに引数を取得しない init()メソッドを定義する必要があります:
function init() {
$this->title = get_string('blockname','block_online_users');
$this->version = 2004111600;
}
もちろん、これでは、あなたが実際に必要とする$courseオブジェクトにアクセスしないままになります。 get_content()内部で必要なため、$courseオブジェクトを取得するコードは以下のようになります:
$course = get_record('course', 'id', $this->instance->pageid);
get_content()に加えて、他のメソッド内部から$courseにアクセスする必要がある場合、同じクエリの複数回実行を避けるため、あなたは、 specialization()メソッド内部から$courseオブジェクトを取得して、後で使用するクラス変数として保存することができます。:
function specialization() {
$this->course = get_record('course', 'id', $this->instance->pageid);
}
設定付きブロック
Moodle 1.4では、ブロックは、新しい「インスタンス設定 (instance configuration)」と区別するため、現在 (Moodle 1.5) 「グローバル設定 (global configuration)」と呼ばれるオプションのみ持つことができました。ブロックが設定をサポートする場合、あなたは以下の対策を講じる必要があります:
- あなたのconfig.htmlファイルをconfig_global.htmlにリネームします。
- 新しくリネームしたファイルを編集して、<form>タグを完全に取り除いてください (Moodleは、あなたの設定をフォーム内に自動的に組み込みます)。
- HTMLの<input>タグを使用している場合、あなたの設定以外にも影響を及ぼします (例 "sesskey")。ですから、同様に<input>タグも取り除いてください (Moodleは必要に応じて自動的に<input>タグ等を追加します)。
- print_configをオーバーライドしている場合、あなたのメソッドをconfig_print()にリネームしてください。
- handle_configをオーバーライドしている場合、あなたのメソッドをconfig_save()にリネームしてください。
特別に適用可能なフォーマットのブロック
ブロックがコースだけに制限されないことを考慮して、あなたが許可または許可したくないブロックの存在を指定する正しい方法が、Moodle 1.5のために開発されました。意図された動作をブロックに保持するには、あなたのブロックで使用されている場合、以下のフォーマット名 ( applicable_formats() の戻り値の配列キー) を変更する必要があります:
- social は、course-view-social になるべきです。
- topics は、course-view-topics になるべきです。
- weeks は、course-view-weeks になるべきです。
あなたは、ユーザが活動モジュールに入ったときに表示されるイントロダクションのように、ブロックを他のページでも表示できるようになったことに留意してください。表示されてはいけないブロックをページから遠ざけるため、適用できるフォーマットをさらに制限するようにしてください。また、ブロック作成を許可または許可しない最終決定のための僅かな修正があります。技術的な詳細は、 applicable_formats()の定義をご覧ください。さらに拡大された例は、Authorized Personnel Only内にある、このテーマに関連するセクションをご覧ください。
これですべてです。あなたのブロックをMoodle 1.5で使用する準備ができました!