php 尝试使用block将js代码插入moodle课程页面

t40tm48m  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(162)

我在Moodle上做了一个模块,它的目的之一是显示学生看到一个活动的次数
但有两个问题,
第一:如果课程是一页一节的,这个js代码只在一页上工作,不知道为什么?
第二:当使用“tiles course format”并启用javascript导航时,此代码不起作用
此代码位于函数get_required_javascript()

$code = 'document.getElementById("module-'.$cmid.'")
     .insertAdjacentHTML("beforeend", "' . addslashes_js($blockdata->viewstemplate) . '");';
$this->page->requires->js_amd_inline ($code);
// $this->page->requires->js_init_code($code , true);

我确实尝试了js_amd_inlinejs_init_code这两个函数
编辑
我把密码改成了

$code = 'require(["jquery", "core/ajax"], function($, ajax) {
    $(document).ready(function() {
        var module = $("#module-'.$cmid.'");
        module.append("'.addslashes_js($blockdata->viewstemplate).'");
    });
    });';

$this->page->requires->js_init_code($code , true);

它解决了第一个问题,第二个仍然存在

kmbjn2e3

kmbjn2e31#

我这样做解决了两个问题,但有时它做了两次

$code = 'require(["jquery", "core/ajax"], function($, ajax) {
            $(document).ready(function() {
                var module = $("#module-'.$cmid.'");
                module.append("'.addslashes_js($blockdata->viewstemplate).'");
              });
            $(document).ajaxComplete(function(event, xhr, settings) {
                if (typeof (settings.data) !== \'undefined\') {
                    var data = JSON.parse(settings.data);
                    if (data.length > 0 && typeof (data[0].methodname) !== \'undefined\') {
                        if (data[0].methodname == \'format_tiles_get_single_section_page_html\' // Tile load.
                            || data[0].methodname == \'format_tiles_log_tile_click\') { // Tile load, cached.
                                $(document).ready(function() {
                                    var module = $("#module-'.$cmid.'");
                                    module.append("'.addslashes_js($blockdata->viewstemplate).'");
                                  });
                        }
                    }
                }
            });
          });';
        $this->page->requires->js_init_code($code);

相关问题