了解Moodle $ context

时间:2017-03-28 08:16:29

标签: moodle moodle-api

来自Moodle doc

  

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

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

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

我尝试使用context_block :: instance($ instanceid),但我不知道如何获取$ instanceid参数。

  • 在这种情况下我应该使用哪种上下文?
  • 如何获得?

1 个答案:

答案 0 :(得分:5)

上下文的类型如下:

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

上下文的层次结构是: 系统=>课程类别=>课程=>活动模块

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

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

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

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

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

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

$context = context_system();