eラーニングシステム Moodleの活用とカスタマイズ

第4回 独自ブロックのインストール

この記事を読むのに必要な時間:およそ 3 分

独自にブロックを開発するには(最も簡単な例)

Moodle 1.9の場合の最も簡単なブロック例

MoodleDocsの開発:ブロック⁠ブロックの作成に関するステップバイステップガイド⁠⁠ に書いてあるように,自分独自のブロックを開発することもできます。とりあえず,枠を作るだけならとても簡単にできますので,今回はそこまでを紹介します。

例えば, exampleという名前のブロックを作りたいとします。

まず,blocksディレクトリの下にexampleディレクトリを作ります。その中に,block_example.phpという名前の以下のようなファイルをアップロードします。文字コードはUTF-8を用いてください。

blocks/example/block_example.php

<?php
class block_example extends block_base {
        function init() {
                $this->title = 'example';
                $this->version = 2010112400; // for Moodle 1.9
        }
        function get_content() {
                if ($this->content !== NULL) {
                        return $this->content;
                }
                $this->content->text = 'こんにちは。<br />ブロックのサンプルです。';
                return $this->content;
        }
}
?>

ディレクトリの命名規則に注意してください。 上記で赤色の箇所は,ブロックの名前(この場合 example)でなければなりません。

Moodleのブロックは,block_baseというクラスを継承して作ります。init()というメソッドの中で,ブロックのタイトルとバージョン番号を定義する必要があります。バージョン番号は, 年月日の後に二桁の数字を加えて表すことになっています。get_content()というメソッドでは,まず,ブロック内に表示する内容($this->content)がすでに定義されている場合は,それをそのまま返すという処理が入っています。これによってMoodleの内部処理の負荷が軽減されるとのことです。それ以降にある,

$this->content->text = 'こんにちは。<br />ブロックのサンプルです。';

の箇所で実際の表示内容を定義しています。これを変更すれば表示内容を変えることができます。

Moodle2の場合には追加が必要

Moodle 1.9ならばこれだけでよいですが,Moodle2では,さらに以下の2つのファイルが必ず必要です。これらが無いと Moodle2ではブロックがインストールされません。

まず,ブロックディレクトリの中にversion.phpというファイルが必要です。このファイルの中でブロックのバージョン番号を指定します。

blocks/example/version.php

<?php
$plugin->version = 2010112400;
?>

また,ブロックディレクトリの下にlangディレクトリがあり,さらにその下にenディレクトリがあって,そこにblock_example.phpという名前のファイルが必要です(つまり,英語の言語ファイルです⁠⁠。このファイルでは,少なくとも,ブロックの名前を指定する必要があります。

blocks/example/lang/en/block_example.php

<?php
$string['pluginname'] = 'example';
?>

コラム

Moodle2向けにモジュールやブロックのコードを修正する方法については,

に報告があります。

作成したブロックのインストール

後は,Moodleにadminでログインして,⁠サイト管理」「通知」をクリックするとインストールされます。ブロックがちゃんとインストールされていることを確認するためには,⁠サイト管理⁠⁠─⁠プラグイン⁠⁠─⁠ブロック⁠⁠─⁠ブロック管理」の画面を開きます。

exampleブロックを設置すると,次のように表示されます。

画像

blocks/example/block_example.phpの$this->content->textに情報をHTMLの書式で代入すれば,表示される情報が変わります。例えば,

<?php
class block_example extends block_base {
  function init() {
    $this->title = 'example';
    $this->version = 2010112400; // for Moodle 1.9
  }
  function get_content() {
    if ($this->content !== NULL) {
      return $this->content;
    }
    $tmp = file_get_contents('http://geomaplookup.net/?ip='.getenv("REMOTE_ADDR"));
    preg_match('/var contentString = "([^\n]+)";\n/',$tmp,$mat);
    $this->content->text = preg_replace('/"[.]*\//','"http://geomaplookup.net/',str_replace('\\','',$mat[1]));
    return $this->content;
  }
}
?>

の太字のように変更すると, http://geomaplookup.net/からの情報(ユーザの現在地と思われる国や都市など)を表示するブロックになります。


次回は,簡単で実用的な独自ブロックの例をいくつかご紹介します。

著者プロフィール

喜多敏博(きた としひろ)

1967年に奈良に生まれる。中学・高校時代に見た父(高校教員)の教え方に感心したことが,自分の教員としての振る舞いに影響していると今になって思う。大学・大学院時代は京都で過ごし,熊本大学に着任。現在はeラーニング推進機構および大学院教授システム学専攻 教授。工学博士(名古屋大学)。

LMS/VLE,非線形システム,電子音楽に興味を持つ。

URL:http://t-kita.net