開発:質問型プラグインの使い方

質問タイププラグインの書き方からリダイレクト)

テンプレート:Questiontype開発者ドキュメント

このガイドに従うには、 New question typeテンプレートを入手する必要があります。 CVSリポジトリから、またはmodules and pluginsデータベースからcontrib / question / type / TEMPLATEディレクトリをチェックすることでそれを得ることができます 。このガイドの残りの部分は、そこにあるREADME.txtファイルの単なるコピーです。 (またはreadmeファイルはこのページのコピーですか?)

新しい質問タイプテンプレートのREADMEファイル

新しい質問タイプテンプレートへようこそ。

この空白のスケルトンは、あなた自身のMoodle質問タイププラグインを実装したい場合に始めるのに良い場所です。

もう1つの良い方法は、TODOのようなコードで良いドキュメントを持っている既存の質問タイプを調べることです(そうでなければ、Timsが "方法を明るくする"ことを願います:-))

テンプレートの最新版はCVSのhttp://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ユーザインターフェースに表示される名前です(英語訳)。これらの指示については、私はあなたが「 私の質問タイプ名 」を選んだと仮定します。

それからあなたはする必要があります

  1. ファイル名の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の名前を変更します。
  2. すべてのファイルで、 '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回出現
  3. すべてのファイルで、「QTYPENAME」を検索して「 私の質問タイプ名 」に置き換えます。あなたが見つけるはずです:
    • ヘルプファイルに1回出現(名前の変更後はlang / en_utf8 / help / myqtypeidentifier / myqtypeidentifier .htmlになります)
    • 言語ファイルに3回出現(名前の変更後はlang / en_utf8 / qtype_ myqtypeidentifier .phpになります)
    • edit_myqtypeidentifier_form.phpに1回出現
    • questiontype.phpに2回出現
  4. YOURNAMEを検索してあなたの名前に置き換えます。 (これは各ファイルの先頭にあるコメント内にあるので重要ではありませんが、確かにあなたは自分の仕事の功績を称えたいと思います。)
    • lang / en_utf8 / qtype_ myqtypeidentifier .php
    • simpletest / testquestiontype.php
    • edit_ myqtypeidentifier _form.php
    • questiontype.php
  5. YOUREMAILADDRESSを検索して自分のEメールアドレスに置き換えます。 (繰り返しますが、これはファイルヘッダーのコメントにのみ含まれていますが、コードについて何か質問がある場合に他のユーザーから連絡がある場合に役立ちます)。
    • YOURNAMEの下にリストされている各ファイルに、YOUREMAILADDRESSが1回出現するはずです。
  6. YOURPACKAGENAMEを検索し、コードのパッケージ名に置き換えます。これはあなたのクラスのためのドキュメンテーションを構築するときにPHPdocumentorによって使用されます。私があなたが書くすべての質問タイプのためにあなたが1つのパッケージ名を作ることを勧めます。たとえば、私が書く質問タイプはすべてou_questiontypesパッケージにあります。
    • YOURNAMEの下にリストされている各ファイルには、YOURPACKAGENAMEが1回出現するはずです。
  7. あなたの質問タイプを表すアイコンを作るためにicon.gifを編集してください。
  8. あなたの新しい質問タイプフォルダをあなたのMoodle開発コードベースの質問/タイプフォルダに移動してください。そうすれば作業中にコードをテストすることができます。

さて、面白いことに

今、あなたはにコードを書く必要があります

  1. 必要なデータベーステーブルをdb / install.xmlに記述します。データベーステーブルを作成する必要がない場合は、dbディレクトリを削除できます。
  2. 質問編集フォームを作成するにはedit_myqtypeidentifier _form.phpを編集してください。
  3. 生徒に質問を表示するテンプレートを作成します。これはdisplay.htmlにあります。柔軟な書式設定を行うには、CSSクラスを使用し、可能であれば既存のクラスを使用する必要があります。どのCSSクラスが存在するのかを見つける簡単な方法はTODOです。
  4. 残りの質問タイプクラスを実装します。これはquestiontype.phpにあります。考慮する必要があります
    1. 質問インスタンスの編集時にデータベースから追加の質問オプションを保存、取得、および削除する
    2. 質問がクイズで使用されている場合の追加の質問オプションおよびセッションの保存、取得、および削除
    3. 生徒に質問を表示する
    4. 回答への対処:回答の採点、正しい回答の提供など
    5. 質問インスタンスのバックアップと復元
    6. 質問インスタンスのインポートとエクスポート
  5. 言語ファイルに、参照するすべての文字列が含まれていることを確認してください。あなたが欲しい文字列のいくつかは既にMoodleコアの言語ファイルにあるかもしれないことに注意してください。もしそうなら、既存の文字列を使用してください。既存の文字列を見つける簡単な方法はlang / en_utf8(またはどちらの言語でも)、特にlang / en_utf8 / quiz.phpでファイルを検索することです。
  6. 質問の種類に応じたヘルプファイルと、必要なその他のヘルプファイルを書きます。
  7. あなたの質問タイプのためにユニットテストのセットを書いてください。

あなたが物事を行う必要があるコード内のすべての場所はTODOとマークされており、そこにはより詳細な指示を与えるコメントがあります。

これらのコメントはまだ完全でも正確でもありません。私はたった今私自身の質問タイプを実行し始めたところです、そして、私はそれらのコメントを記入して、そして私がしながらこの文書を完成させるでしょう。 Tim Hunt 2007年4月12日12時46分(CDT)

輸出入サポート

あなたがサポートしたい(それぞれの)フォーマットタイプのための関数を追加することによってインポートとエクスポートのサポートを提供することができます。命名フォーマットはimport_from_formatexport_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つの例は、サーバー上のjavajavacへのパスを知る必要がある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などを使用する。 

テスト

新しい質問タイプが機能していること、そして必要なことをすべて行ったことをどのようにして知っていますか。以下のテストをすべて行った場合は、必要なことをすべて行ったと自信を持って確認できます。

  1. あなたのタイプのいくつかの新しい質問を作成して、それぞれオプションのかなり異なる組み合わせを実行してください。
  2. 各質問の編集フォームに戻って、オプションが正確に保存されたこと、およびオプションを変更できること、そして変更内容が保存されたことを確認します。
  3. 無効な入力を編集フォームに入力して、それが拒否されていることを確認してください。
  4. プレビューモードで新しい質問をそれぞれ試してください。彼らが正しく印を付けていることを確認し、正しい、間違った回答の範囲についてのフィードバックを与えなさい。特にCSSやJavaScriptを使用している場合は、さまざまなブラウザを使用してみてください。
  5. それぞれの試みが最後に構築されている3つのクイズ、1つは適応モード、1つは非適応モード、もう1つはクイズにあなたの質問を追加してください。おそらくいくつかの標準的な質問タイプを混在させることです。 1ページに1つの質問を作成し、同じページにすべての質問を配置したクイズを作成します。
  6. プレビューモードでこれらのクイズを何度か試して、正しい範囲と間違った範囲の回答を入力してください。
  7. 今すぐ学生としてログインし、本物のクイズを取ります。
  8. すべてのクイズレポートを表示して、質問に関する情報が正しく表示されていることを確認します。
  9. コースをバックアップし、新しいコースとして復元し、すべての質問が正確にコピーされていることを確認してください。このテストを行う前に、質問の少なくとも1つを編集し、HTMLを入力できるところであれば、コースの別の部分、たとえばリソースへのリンクを挿入してください。バックアップと復元の後、リンクが復元されたリソースの新しいURLを指すように更新されていることを確認してください。
  10. 元のコースからあなたのサポートをインポート/エクスポートフォーマットのそれぞれにあなたの質問をエクスポートしてください。これらの質問を新しい質問カテゴリにインポートし、それらが正確にコピーされたことを確認します(各形式で表示できる質問の種類の範囲内)。
  11. Webコンテンツのアクセシビリティガイドラインなど、アクセシビリティのガイドラインに対して質問の種類を確認してください。

デバッグのヒント

質問タイプを機能させようとしているときに役立つヒントは次のとおりです。

  • データベースに格納されている内容を確認するには、クイズで質問を試みている間にこのデータベースクエリの結果を監視します。これは、コード内で何が起こっているのかを調べるのにとても便利な方法です。

終わったら

他の人と共有できるように、あなたの質問タイプをMoodle CVSサーバのcontribエリアにチェックインすることを検討してください(アクセスしている場合は、リクエストするか、コードをzipファイルとして投稿してください)。

新しい質問タイプをモジュールとプラグインデータベースに追加します。