0

この問題は本当に私の頭を傷つけています。

私はMoodleのカスタムグレードエクスポートプラグインに取り組んでおり、grade_exportクラスをサブクラス化しています:

class grade_export_sitscsv extends grade_export {
...

私が作成したフォームは2つのカスタム変数を設定するため、* process_form()*関数を実装しました。この関数は、親クラスの関数を呼び出します。

function process_form($formdata) {
  $this->grade_item = preg_replace('/itemids\[([0-9]+)\]/','\1',$formdata->grade_item);
  $this->sits_assnum = $formdata->sits_assnum;

  parent::process_form($formdata);
}

これらのインスタンス変数が*display_preview()*関数で設定されていることがわかります。

public function display_preview() {
  echo("<h2>Do we need a preview?</h2>");
  echo("<p> Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."</p>");
}

(たとえば、Grade item:7487、SITS num:7を印刷します)。

ただし、* print_grades()*関数で変数を使用しようとすると、次のように設定されません。

public function print_grades() {
    global $CFG;
    echo("Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."\n");

... Grade item:、SITS num:を出力ファイルに出力します。

これを解決するのに役立つ提案をいただければ幸いです。

4

1 に答える 1

0

Michael と mkaatman さん、ご回答ありがとうございます。同僚の助けを借りて、最終的に解決しました。

問題は、print_grades()呼び出されたオブジェクトが、同じクラスであるにもかかわらず、display_preview()が呼び出されたときと同じオブジェクトではなかったことです。 <input type="hidden"... elements) を中間ページに挿入し、このデータから新しいオブジェクトがインスタンス化されました。

データが 2 番目のフォームに書き込まれ、新しいオブジェクトに渡されるようにする必要がありました。

于 2013-02-17T23:54:37.540 に答える