新規開発したブロックの設定画面に、独自の項目を加えたい

新規開発したブロックの設定画面に、独自の項目を加えたい

- Shota Abe の投稿
返信数: 6

日頃から大変お世話になっております。

卒業研究でのMoodleのプラグイン開発はそろそろ終わるのですが、
また教えて頂きたいことがありますのでよろしくお願い致します。

新規ブロックとして、各小テストの「個人の点数」「平均点」「最高点」が表示されるブロックを開発しました(画像1枚目)

データはテーブル:mdl_quiz_gradesに「quiz」と「userid」を使ったselect文をかけて取得しています。

しかし、「quiz」はテーブル:mdl_quizで「id」の数字を確認し、プログラムに直接数字を書いているので、今後管理が大変になることが懸念されます(画像3枚目 ) 。

そこで、ブロックの設定画面(画像4枚目)に小テスト名を入力する項目を作成し
1.小テスト名を入力する(複数あるのでテキストボックスも複数)
2.決定ボタンを押す(決定ボタンも新たに追加)
3.入力された小テスト名とコースIDを利用したselect文を、テーブル:mdl_quizにかけて「id」を取得
4. 3で取得した「id(mdl_quiz_gradesではquiz)」と「userid」を使ったselect文をテーブル:mdl_quiz_gradesにかけて小テスト結果を取得

の流れで小テスト結果を取得したいと考えております。

ブロックの設定画面はedit_form.php(画像2枚目)だということは分かったのですが、どのようにプログラムを追加していけば良いのかが調べたのですがわからない状況です。

大変分かりにくい説明で申し訳ないのですが、ご教授の方よろしくお願い致します。

※mdl_quizでの主キー「id」がmdl_quiz_gradesでは外部キー「quiz」となっています
添付 スクリーンショット 2016-09-16 21.13.53.png
添付 スクリーンショット 2016-09-16 22.42.02.png
添付 スクリーンショット 2016-09-16 22.50.05.png
添付 スクリーンショット 2016-09-16 22.55.11.png
Shota Abe への返信

Re: 新規開発したブロックの設定画面に、独自の項目を加えたい

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

小テスト名を入力するのも分かりやすいと思いますが、コース内のすべての小テストを一覧表示してチェックボックスで選択できるようにされても宜しいかと思います。

ブロックの設定は「blocks/activity_results/edit_form.php」が参考になるかと思います。また、コース内のすべての小テストをチェックボックス付きで一覧表示する部分は「user/filters/user_filter_forms.php」の下記88行目あたりが参考になるかと思います。

                foreach ($datas as $i => $data) {
                    $description = $field->get_label($data);
                    $mform->addElement('checkbox', 'filter['.$fname.']['.$i.']', null, $description);
                }


Moodleのブロック開発に関しましては下記ページを参考にされてください。

[Blocks - MoodleDocs]
https://docs.moodle.org/dev/Blocks

添付 block_settings.png
Mitsuhiro Yoshida への返信

Re: 新規開発したブロックの設定画面に、独自の項目を加えたい

- Shota Abe の投稿

Yoshidaさま

ご返信ありがとうございます。
教えて頂いた内容やサイト参考に取り組んでみます。

取り組んでいる途中で何か分からないことがありましたらこちらに書かせて頂くので
よろしくお願い致します。

Shota Abe への返信

Re: 新規開発したブロックの設定画面に、独自の項目を加えたい

- Shota Abe の投稿

blocks/activity_results/edit_form.phpを参考にチェックボックスにしたい項目を以下のプログラムで抜き出しました。

プログラム

配列

ここまで行ったのですが、Yoshidaさまが添付していたようなチェックボックスを
user_filter_forms.phpを参考にしながら試したのですがうまくいきません(ブロック設定画面にいくとエラーで何も表示されなくなる)。

ここまでの作業で間違っている点、今後行えば良い点などがありましたらご教授のほうよろしくお願い致します。

Shota Abe への返信

Re: 新規開発したブロックの設定画面に、独自の項目を加えたい

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

テスト的に作成したxxxブロック (blocks/xxx) 内のedit_form.phpのコードを投稿させて頂きます。ご参考までにご覧ください。

<?php

class block_xxx_edit_form extends block_edit_form {

    protected function specific_definition($mform) {

        global $CFG, $DB, $USER, $COURSE;

        require_once($CFG->dirroot . '/grade/querylib.php');
        require_once($CFG->libdir . '/gradelib.php');

        $course_id = $COURSE->id;
        $user_id = $USER->id;

        $course_modules = get_array_of_activities($course_id);
        $user = $DB->get_record('user', array('id'=>$user_id));

        $mform->addElement('header', 'configheader', get_string('blocksettings', 'block'));
        $mform->addElement('static',  '', get_string('selectquiz', 'block_xxx'));

        foreach($course_modules as $key=>$item) {
           if ($item->mod == 'quiz') {
               $quiz_name = $item->name;
               $mform->addElement('checkbox', $item->id, null, $quiz_name);
           }
        }
    }
}

添付 block_xxx.png
Mitsuhiro Yoshida への返信

Re: 新規開発したブロックの設定画面に、独自の項目を加えたい

- Shota Abe の投稿

Yoshidaさま

ご返信ありがとうございます。
何から何まで本当にありがとうございます。

教えて頂いたプログラムに課題モジュールも同じように表示させたく、プログラムを付け加えました。

チェックボックスにチェックを入れた小テストなどの名前をそれぞれ変数に入れたいのですが可能でしょうか。

セッションで各phpファイルで利用したいと思っております。

よろしくお願い致します。