如何在Moodle课程中定期更改HTML块的内容?

问题描述

在Moodle课程中,我需要在不同时间一张一张地显示多张图片。为此,我一次使用了一个HTML块,且每次仅带有一张图片(在我的第一次尝试中,我使用了一个随机词汇表输入块,结果证明这是一个不足的解决方案)。 HTML块方法有点麻烦,因为每当我要显示其他图片时,我都必须手动更新HTML块。
我希望HTML块中的图片每天或每周自动更改。可以做到吗?如果是这样,有人可以请我走上正确的路吗?

解决方法

我认为这个问题的关键是您可以将javascript添加到html块中。这就是为什么这些功能都带有XSS警告标记的原因。这是我的方法:

  1. 在您的Moodle课程中添加HTML块
  2. 按照每周显示的顺序添加所需的所有图片。
  3. 根据您使用的编辑器(很可能是atto)找到“ html”按钮,然后编辑原始文本(帮助:MoodleDocs)并单击它。
  4. 现在,您可以看到先前添加的图片的<img>标签。添加以下javascript每周轮流浏览这些图片:
<script>
    // Get the week number.
    Date.prototype.getWeek = function() {
        var onejan = new Date(this.getFullYear(),1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
    }
    var numberofweek = (new Date()).getWeek();

    var parent = document.currentScript.parentNode;
    var pictures = parent.querySelectorAll('img');
    for (var picturenumber = 0; picturenumber < pictures.length; picturenumber++) {
        if (!(numberofweek % pictures.length == picturenumber)) {
            // Hide all pictures that are not mapped to this week.
            pictures[picturenumber].style.display = 'none';
        }
    }
</script>

这种方法的缺点:

  1. 图片仍被加载。一些学生可能会发现这一点。因此,不要在下周放任何图片。
  2. 有些学生有时会根据本地计算机的时区而获得不同的图片。

这种方法的优点:

  1. 您可以轻松编辑图片和顺序
  2. 您不需要安装任何插件,因为block_html附带了moodle

在Moodle 3.9.x上测试
如果可用的周数超过了可用的图片,则这些图片将从头开始。