Moodle開発者フォーラム

プログラムによるブロックのドック/アンドック切替処理について

 
画像 真之 日向
プログラムによるブロックのドック/アンドック切替処理について
 

お初にお目にかかります。Moodle初心者の日向と申します。

ブロックのドック/アンドックの切替は各ブロックの右上にあるアイコンをクリックすることで

可能ですが、1個ずつ切り替えるのが面倒なので、複数のブロックを一度にドック/アンドックしてくれるブロックを作ろうと検討中なのですが、プログラムで切替を行うためにはどこ(DB?)をどのように処理すればよいか見つけられませんでした。

テーブル:mdl_block_instancesはブロックの表示位置や階層などの指定のみで、ドック/アンドックはここではないようです。

どなたか詳しい方がいらっしゃいましたら、お手数ですがご教授お願いいたします。

 
最大評点: -
1997年の頃の写真です
Re: プログラムによるブロックのドック/アンドック切替処理について
Translators

全くJavaScriptは分からないのですが,//<![CDATA[から先のJavaScriptのコードが何か所かWebページのHTMLソースの中に存在しますね.その中の一部抜粋,

    M.yui.galleryversion = "2010.04.08-12-35";
    Y.use("core_dock", "moodle-block_navigation-navigation", function () {
        M.block_navigation.init_add_tree({
            "id": "1451",
            "instance": "1451",
            "candock": true,
            "courselimit": "20",
            "expansionlimit": 0
        });
    });
    M.yui.galleryversion = "2010.04.08-12-35";
    Y.use("moodle-filter_glossary-autolinker", function () {
        M.filter_glossary.init_filter_autolinking({
            "courseid": 0
        });
    });
    M.yui.galleryversion = "2010.04.08-12-35";
    Y.use("core_dock", "moodle-block_navigation-navigation", function () {
        M.block_navigation.init_add_tree({
            "id": "1452",
            "instance": "1452",
            "candock": true
        });
    });

YUIライブラリを用いて宣言されている,これら二つ(このページの例では,「ナビゲーション」と「設定」の二つのブロックがdock/undock可能な状態)の宣言が関係しているのでしょうね.
この辺りがヒントにならないでしょうか.なお,JavaScriptのソースコードの整形はこちらのページ(http://jsbeautifier.org/)を利用しました.

 

1997年の頃の写真です
Re: プログラムによるブロックのドック/アンドック切替処理について
Translators

生成に関わるのは,

blocks\navigation\yui\src\navigation\js\navigation.js
blocks\navigation\yui\build\moodle-block_navigation-navigation\moodle-block_navigation-navigation.js

の辺りですね.全ソースを対象に"candock"で調べると出てきます.idあるいはinstanceの番号はブロック生成時に得られますので,PHPであれば,

blocks\settings\block_settings.php(95):         $arguments = array('id' => $this->instance->id, 'instance' => $this->instance->id, 'candock' => $this->instance_can_be_docked());

こんな個所がヒントになりそうです.

おや,こんなコードも.

blocks\dock.js(196):     var removeall = Y.Node.create('<img alt="'+M.str.block.undockall+'" title="'+M.str.block.undockall+'" tabindex="0"/>');

blocks\settings\block_settings.php(119):         if ($this->docked && optional_param('undock', null, PARAM_INT)==$this->instance->id) {

blocks\navigation\block_navigation.php(157):         if ($this->docked && optional_param('undock', null, PARAM_INT)==$this->instance->id) {

お役に立ったでしょうか.

画像 真之 日向
Re: プログラムによるブロックのドック/アンドック切替処理について
 

白井様

早速の返信ありがとうございます。

ご指摘のコードを元に調査を進めていきたいと思います。

また、mdl_user_preferencesというテーブルでdock/undock状態が登録されているようです。

ご教授ありがとうございました。