開発:問題型プラグインの使い方
- メタ要件
- データベース構造
- 状態図
- ランタイム構造
- インポート・エクスポート
- 新しい問題タイプを作る
- 問題バンクの整合性チェック
- CVSのコード
- 相互参照コード
このガイドに従うには、 New question typeテンプレートを入手する必要があります。 CVSリポジトリから、またはmodules and pluginsデータベースからcontrib / question / type / TEMPLATEディレクトリをチェックすることでそれを得ることができます 。このガイドの残りの部分は、そこにあるREADME.txtファイルの単なるコピーです。 (またはreadmeファイルはこのページのコピーですか?)
内容
新しい問題タイプテンプレートのREADMEファイル
新しい問題タイプテンプレートへようこそ。
この空白のスケルトンは、あなた自身のMoodle問題タイププラグインを実装したい場合に始めるのに良い場所です。
もう1つの良い方法は、TODOのようなコードで良いドキュメントを持っている既存の問題タイプを調べることです(そうでなければ、Timsが "方法を明るくする"ことを願います:-))
テンプレートの最新版はCVSのhttps://moodle.cvs.sourceforge.net/moodle/contrib/plugins/question/type/TEMPLATE/にあります。あなたはあなた自身のコピーがcvsエクスポートではなくcvsエクスポートをしたいのであるから。パッケージは、モジュールとプラグインデータベースからダウンロードすることもできます 。
このヘルプの最新版はhttps://docs.moodle.org/en/How_to_write_a_question_type_pluginで読むことができます(きれいにフォーマットされています ) 。
警告、このテンプレートはまだ完成していません。
入門
興味を引くようになる前に、この汎用テンプレートを自分の問題タイプに変換するために、ファイルの名前変更と検索と置換を少し行う必要があります。あなたは二つのことを選んだ必要があります
- 問題タイプの識別子
- これは小文字の文字列で、おそらくあなたの問題タイプを参照するためにMoodleコードが使用することを強調しています。これはユニークである必要があるので、おそらくあなたのイニシャルから始めましょう。たとえば、OUで働いている間に作成したすべての問題タイプはou_somethingと呼ばれます。これ以降の説明では、 ' myqtypeidentifier 'を選択したと仮定します。
- あなたの問題タイプの名前
- これは、人々がMoodleユーザインターフェースに表示される名前です(英語訳)。これらの指示については、私はあなたが「 私の問題タイプ名 」を選んだと仮定します。
それからあなたはする必要があります
- ファイル名のTEMPLATEが表示されている場所をすべてmyqtypeidentifierに変更します。あれは:
- 最上位のTEMPLATEディレクトリーをmyqtypeidentifierに名前変更します 。
- 言語ファイルLANG / en_utf8 / qtype_ TEMPLATEの .PHPの名前を変更するには、LANG / en_utf8 / qtype_ myqtypeidentifierの.php
- ヘルプファイルの名前をlang / en_utf8 / help / TEMPLATE / TEMPLATE .htmlからlang / en_utf8 / help / myqtypeidentifier / myqtypeidentifier .htmlに変更します。
- myqtypeidentifier _form.phpをedit_するために編集フォームedit_ テンプレートの _form.phpの名前を変更します。
- すべてのファイルで、 'QTYPEID'を検索して 'myqtypeidentifier'に置き換えます。あなたが見つけるはずです:
- 言語ファイルに2回出現(名前の変更後はlang / en_utf8 / qtype_ myqtypeidentifier .phpになります)
- db / install.xmlに1回出現
- simpletest / testquestiontype.phpに4回出現
- edit_ myqtypeidentifier _form.phpで2回出現
- questiontype.phpに4回出現
- すべてのファイルで、「QTYPENAME」を検索して「 私の問題タイプ名 」に置き換えます。あなたが見つけるはずです:
- ヘルプファイルに1回出現(名前の変更後はlang / en_utf8 / help / myqtypeidentifier / myqtypeidentifier .htmlになります)
- 言語ファイルに3回出現(名前の変更後はlang / en_utf8 / qtype_ myqtypeidentifier .phpになります)
- edit_myqtypeidentifier_form.phpに1回出現
- questiontype.phpに2回出現
- YOURNAMEを検索してあなたの名前に置き換えます。 (これは各ファイルの先頭にあるコメント内にあるので重要ではありませんが、確かにあなたは自分の仕事の功績を称えたいと思います。)
- lang / en_utf8 / qtype_ myqtypeidentifier .php
- simpletest / testquestiontype.php
- edit_ myqtypeidentifier _form.php
- questiontype.php
- YOUREMAILADDRESSを検索して自分のEメールアドレスに置き換えます。 (繰り返しますが、これはファイルヘッダーのコメントにのみ含まれていますが、コードについて何か問題がある場合に他のユーザーから連絡がある場合に役立ちます)。
- YOURNAMEの下にリストされている各ファイルに、YOUREMAILADDRESSが1回出現するはずです。
- YOURPACKAGENAMEを検索し、コードのパッケージ名に置き換えます。これはあなたのクラスのためのドキュメンテーションを構築するときにPHPdocumentorによって使用されます。私があなたが書くすべての問題タイプのためにあなたが1つのパッケージ名を作ることを勧めます。たとえば、私が書く問題タイプはすべてou_questiontypesパッケージにあります。
- YOURNAMEの下にリストされている各ファイルには、YOURPACKAGENAMEが1回出現するはずです。
- あなたの問題タイプを表すアイコンを作るためにicon.gifを編集してください。
- あなたの新しい問題タイプフォルダをあなたのMoodle開発コードベースの問題/タイプフォルダに移動してください。そうすれば作業中にコードをテストすることができます。
さて、面白いことに
今、あなたはにコードを書く必要があります
- 必要なデータベーステーブルをdb / install.xmlに記述します。データベーステーブルを作成する必要がない場合は、dbディレクトリを削除できます。
- 問題編集フォームを作成するにはedit_myqtypeidentifier _form.phpを編集してください。
- 学生に問題を表示するテンプレートを作成します。これはdisplay.htmlにあります。柔軟な書式設定を行うには、CSSクラスを使用し、可能であれば既存のクラスを使用する必要があります。どのCSSクラスが存在するのかを見つける簡単な方法はTODOです。
- 残りの問題タイプクラスを実装します。これはquestiontype.phpにあります。考慮する必要があります
- 問題インスタンスの編集時にデータベースから追加の問題オプションを保存、取得、および削除する
- 問題が小テストで使用されている場合の追加の問題オプションおよびセッションの保存、取得、および削除
- 学生に問題を表示する
- 解答への対処:解答の採点、正しい解答の提供など
- 問題インスタンスのバックアップとリストア
- 問題インスタンスのインポートとエクスポート
- 言語ファイルに、参照するすべての文字列が含まれていることを確認してください。あなたが欲しい文字列のいくつかは既にMoodleコアの言語ファイルにあるかもしれないことに注意してください。もしそうなら、既存の文字列を使用してください。既存の文字列を見つける簡単な方法はlang / en_utf8(またはどちらの言語でも)、特にlang / en_utf8 / quiz.phpでファイルを検索することです。
- 問題の種類に応じたヘルプファイルと、必要なその他のヘルプファイルを書きます。
- あなたの問題タイプのためにユニットテストのセットを書いてください。
あなたが物事を行う必要があるコード内のすべての場所はTODOとマークされており、そこにはより詳細な指示を与えるコメントがあります。
これらのコメントはまだ完全でも正確でもありません。私はたった今私自身の問題タイプを実行し始めたところです、そして、私はそれらのコメントを記入して、そして私がしながらこの文書を完成させるでしょう。 Tim Hunt 2007年4月12日12時46分(CDT)
エクスポートとインポートサポート
あなたがサポートしたい(それぞれの)フォーマットタイプのための関数を追加することによってインポートとエクスポートのサポートを提供することができます。命名フォーマットはimport_from_formatとexport_to_formatで 、必要に応じてフォーマットを置き換えます(例: export_to_xml )。現在すべてのインポート/エクスポートプラグインがこれをサポートしているわけではありません。詳細については、 開発:Import / export_for_questiontype_pluginsを参照してください。
特にあなたのインポートフォーマットが、渡されたデータがあなたのプラグインと同じタイプの問題に対するものであることをチェックすることが重要であることに注意してください。ほとんどの場合、これは単に$ data内の問題タイプ(qtype)名をチェックするだけの問題です。これは、インポート形式のタイプ名がプラグイン名と一致しない可能性があるため、 すべてのプラグインがポーリングされて問題を処理するためのものになるためです。
言語文字列
lang / en_utf8 / qtype_ myqtypeidentifier .phpには、少なくとも次の文字列を定義する必要があります。
$ string [ 'AddingQTYPEID' ] = 'QTYPENAMEの問題を追加する' ; $ string [ 'editingQTYPEID' ] = 'QTYPENAMEの問題の編集' ; $ string [ 'QTYPEID' ] = 'QTYPENAME' ; '; $ string [ ' QTYPEIDsummary ' ] = 'この問題タイプが何をするのかに関する1文または2文の要約。 ;
モデルの問題タイプ
あなたの問題が既存の問題タイプに似ている(おそらくそれがどのように表示されるか、あるいはどのように採点されるかによってのみ変わる)場合、TEMPLATE問題から始めるよりも既存の問題タイプを適応させる方が簡単かもしれません。
バックアップ/リストアおよびインポート/エクスポートは、Contribの問題とはコアの問題の種類では異なる方法で処理されるため、新しい問題の種類をコアの問題の種類に基づく場合は、バックアップ/リストアおよびインポート/エクスポート機能を追加する必要があります。
あなたの問題が既存の問題タイプと非常に異なっていても、既存の問題タイプは様々なサブタスクの良い例を提供することができます。
評定
- 作文問題
- 手動評定
- 記述問題
- 単一解答に対する適応評定
- ○/×問題
- 適応評定を許可しない単一解答の評定
- 一致
- 複数解答に対する適応評定
- 数値問題
- 数値解答を許容範囲で評価する
バックアップ/リストアとインポート/エクスポート
バックアップ/リストアとインポート/エクスポートは、コアの問題タイプに対して別々に処理されるため、orderやregexpなどのcontribの問題タイプを見てください。
プラグインに必要なJavaScriptとCSS
プラグインにJavaScriptのカスタムCSSが必要な場合は、styles.cssやscript.jsというファイルをプラグインフォルダに追加するだけで、問題がある小テスト(または他の場所)の任意のページに自動的に含まれます。試みた。
Moodle 2.0以降、これらのファイルはあなたの問題タイプの編集フォームを表示するquestion / question.phpページにも含まれます。
より複雑な要件がある場合は、代わりに問題タイプクラスのget_html_head_contributionsメソッドおよびget_editing_head_contributions(2.0+)メソッドをオーバーライドすることができます。
あるいは、本当に必要な場合は、styles.phpファイルとscript.phpファイルを呼び出すことで、PHPコードを使用してCSSとJSを生成できますが、これはお勧めできません。
あなたの問題タイプの設定
Template:Moodle 2.0時々あなたが問題タイプはサイト管理者エリアでいくつかの設定を必要とするかもしれません。この2つの例は、サーバー上のjavaとjavacへのパスを知る必要があるJUnit問題タイプと、接続する問題エンジンを設定する必要があるOpaque問題タイプです。
あなたの問題タイプの管理者設定をするためには、あなたはあなたの問題タイプフォルダの中にファイルsettings.phpを作成する必要があるだけです。そこで、 admin_settingsオブジェクトを作成し、それらをsettings.phpがインクルードされたときに有効範囲となる$ settingsオブジェクトに追加する必要があります。たとえば、次のコードをquestion / type / sojunit / settings.phpに配置すると、sojunit問題タイプに対して3つのテキスト設定が定義され、管理者はこの問題タイプを機能させるために必要なパスを入力できます。
<?php $設定 - > 追加 ( 新しい admin_setting_configtext ( 'qtype_sojunit / pathtojava' 、 get_string ( 'pathtojava' 、 'qtype_sojunit' ) 、 get_string ( 'configpathtojava' 、 'qtype_sojunit' ) 、 '/ usr / bin / java' ) ) ; $設定 - > 追加 ( 新しい admin_setting_configtext ( 'qtype_sojunit / pathtojavac' 、 get_string ( 'pathtojavac' 、 'qtype_sojunit' ) 、 get_string ( 'configpathtojavac' 、 'qtype_sojunit' ) 、 '/ usr / bin / javac' ) ) ; $設定 - > 追加 ( 新しい admin_setting_configtext ( 'qtype_sojunit / pathtojunit' 、 get_string ( 'pathtojunit' 、 'qtype_sojunit' ) 、 get_string ( 'configpathtojunit' 、 'qtype_sojunit' ) 、 '/usr/share/java/junit.jar')); ?
問題タイプコードは、次のようにしてこれらの設定にアクセスできます。
$ sojunitcfg = get_config ( 'qtype_sojunit' ) ; //処理に$ sojunitcfg-> pathtojavaなどを使用する。
テスト
新しい問題タイプが機能していること、そして必要なことをすべて行ったことをどのようにして知っていますか。以下のテストをすべて行った場合は、必要なことをすべて行ったと自信を持って確認できます。
- あなたのタイプのいくつかの新しい問題を作成して、それぞれオプションのかなり異なる組み合わせを実行してください。
- 各問題の編集フォームに戻って、オプションが正確に保存されたこと、およびオプションを変更できること、そして変更内容が保存されたことを確認します。
- 無効な入力を編集フォームに入力して、それが拒否されていることを確認してください。
- プレビューモードで新しい問題をそれぞれ試してください。彼らが正しく印を付けていることを確認し、正しい、間違った解答の範囲についてのフィードバックを与えなさい。特にCSSやJavaScriptを使用している場合は、さまざまなブラウザを使用してみてください。
- それぞれの試みが最後に構築されている3つの小テスト、1つは適応モード、1つは非適応モード、もう1つは小テストにあなたの問題を追加してください。おそらくいくつかの標準的な問題タイプを混在させることです。 1ページに1つの問題を作成し、同じページにすべての問題を配置した小テストを作成します。
- プレビューモードでこれらの小テストを何度か試して、正しい範囲と間違った範囲の解答を入力してください。
- 今すぐ学生としてログインし、本物の小テストを取ります。
- すべての小テストレポートを表示して、問題に関する情報が正しく表示されていることを確認します。
- コースをバックアップし、新しいコースとしてリストアし、すべての問題が正確にコピーされていることを確認してください。このテストを行う前に、問題の少なくとも1つを編集し、HTMLを入力できるところであれば、コースの別の部分、たとえばリソースへのリンクを挿入してください。バックアップとリストアの後、リンクがリストアされたリソースの新しいURLを指すように更新されていることを確認してください。
- 元のコースからあなたのサポートをインポート/エクスポートフォーマットのそれぞれにあなたの問題をエクスポートしてください。これらの問題を新しい問題カテゴリにインポートし、それらが正確にコピーされたことを確認します(各形式で表示できる問題の種類の範囲内)。
- Webコンテンツのアクセシビリティガイドラインなど、アクセシビリティのガイドラインに対して問題の種類を確認してください。
デバッグのヒント
問題タイプを機能させようとしているときに役立つヒントは次のとおりです。
- データベースに格納されている内容を確認するには、小テストで問題を試みている間にこのデータベースクエリの結果を監視します。これは、コード内で何が起こっているのかを調べるのにとても便利な方法です。
終わったら
他の人と共有できるように、あなたの問題タイプをMoodle CVSサーバのcontribエリアにチェックインすることを検討してください(アクセスしている場合は、リクエストするか、コードをzipファイルとして投稿してください)。
新しい問題タイプをモジュールとプラグインデータベースに追加します。