【问题标题】:Injecting CSS in a Moodle course format plugin在 Moodle 课程格式插件中注入 CSS
【发布时间】:2019-07-23 21:45:14
【问题描述】:

我正在为 Moodle 编写一个所谓的“格式插件”。此插件的输出需要使用存储在文件 styles.css 中的 CSS 样式,该文件是插件的一部分。不幸的是,由于严格的缓存,更改不会在屏幕上更新。通过启用“主题设计模式”(站点管理 > 外观 > 主题设置)可以避免这种情况,但 Moodle 会变得非常慢 - 使用它会慢很多。

“活动插件”等其他插件类型允许自定义定义,例如 $PAGE->requires->css( '/path/to/my/custom.css'); 后跟写入 HTML 标头 echo $OUTPUT->header(); 的命令。但是,这不适用于格式插件。 Moodle 报错:“打印后不能要求 CSS 文件。”。

在运行时使用 AMD /Javascript 调用加载 css,无效:

    var link;
    for(var i=0; i< css.length;i++){
      link = document.createElement("link");
      link.rel = "stylesheet";
      link.type = "text/css";
      link.href = css[i];
      document.getElementsByTagName("head")[0].appendChild(link);
    }

现在,我正在寻找另一种使用 PHP 将&lt;link href="/path/to/my/custom.css"&gt; 注入 HTML 的方法。

【问题讨论】:

    标签: css moodle


    【解决方案1】:

    坚持使用styles.css,无需启用设计模式,但无论何时需要从 Moodle 项目的根目录运行重建 css/主题缓存:

    $ php admin/cli/purge_caches.php
    

    清除 Moodle 缓存后,Moodle 将重建并提供更新后的 css(只有第一个请求会很慢),但不要忘记您可能还需要清除浏览器缓存。

    总结:更新 css、清除 Moodle 缓存、浏览器“硬”刷新。

    【讨论】:

    • 如果我有几个其他 css 文件没有通过使用 @import url(...)@import '...' 获得引用,我该如何坚持使用 styles.css? Moodle 替换了文件路径,使文件无法加载。
    • 您可以将它们视为 SCSS 文件并将它们转换为一个大的 style.css 文件。图片和字体可以使用 [[pix]] 和 [[font]] 特殊占位符引用,请参阅:docs.moodle.org/37/en/How_to_add_custom_fonts_in_a_themedocs.moodle.org/dev/Using_images_in_a_theme(文档讨论主题,但这也适用于其他类型的插件)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多