了解Moodle $上下文

ben*_*.IT 4 moodle moodle-api

来自Moodle doc:

上下文是Moodle中可以分配角色的空间.

我知道上下文是用于管理Moodle对象的逻辑空间.

我开发了一个带有文件上传的自定义块插件,我使用它file_prepare_draft_areafile_save_draft_area_files函数.有一个$context必须传递的参数,我真的不知道我应该传递什么上下文?这意味着,我想,我应该在哪个逻辑空间中放置我的块插件上传的文件?在我看来,最合乎逻辑的是将上传的文件存储在与我的块插件相关的上下文中.

我试图使用context_block :: instance($ instanceid),但我不知道如何获取$ instanceid param.

  • 在这种情况下我应该使用哪种上下文?
  • 怎么弄?

dav*_*ith 7

上下文的类型如下:

  • 系统
  • 课程类别
  • 课程
  • 活动模块
  • 用户

上下文的层次结构是:System => Course category => Course => Activity module

阻止上下文可以出现在课程内或"网站"课程中.用户上下文不属于课程.

如果您希望文件绑定到块的特定实例(例如,当删除块时它们会自动删除,并且您可以将块的不同实例中的文件分开),那么您应该使用块上下文(但是您将必须将块的instanceid传递给子页面,以便使用它来获取上下文:

$context = context_block::instance($blockinstanceid);

如果您希望文件绑定到课程 - 因此课程中块的所有实例共享相同的文件空间,并且仅在删除整个课程时删除文件,然后使用课程上下文(将courseid传递到子页面,作为一个参数,然后使用:

$context = context_course::instance($courseid);

但是,如果要在站点上的所有块之间共享该文件区域,则系统上下文就是您想要的:

$context = context_system();

  • 听起来不错,应该在官方文档中!谢谢@davosmith! (2认同)