我正在为Moodle开发一个模块。我已经实现了在课程中安装和实例化它。问题是,在“编辑模式”启用时,moodle我发出以下消息:
The module mymodule does not define the standard capability mod/mymodule:addinstance
line 3451 of \course\lib.php: call to debugging()
line 1899 of \course\lib.php: call to course_allowed_module()
line 1767 of \course\lib.php: call to get_module_metadata()
line 682 of \course\format\renderer.php: call to print_section_add_menus()
line 49 of \course\format\weeks\format.php: call to format_section_renderer_base->print_multiple_section_page()
line 276 of \course\view.php: call to require()
在/mod/mymodule/db/access.php
文件中,我有以下代码:
defined('MOODLE_INTERNAL') || die();
$capabilities = array(
'mod/mymodule:view' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_ALLOW,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/mymodule:submit' => array(
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'student' => CAP_ALLOW
)
),
);
我是Moodle模块开发的初学者。我已阅读以下文档:
但我没有澄清任何事情。
已编辑2013-04-28
我已将此代码添加到我的access.php文件($ capabilities数组):
'mod/mymodule:myaddinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'user' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/my:manageblocks'
),
'mod/mymodule:addinstance' => array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/site:manageblocks'
),
但它不起作用。
答案 0 :(得分:2)
起初它似乎是一个奇怪的错误消息,因为它提到了mod/mymodule:addinstance
,但你的代码中却没有。但仔细观察,这似乎是问题 - moodle希望你定义addinstance
,但你没有!
这显然是从2.4开始的新行为:http://docs.moodle.org/dev/Blocks#db.2Faccess.php
解决方案似乎是将addinstance
(可能还有myaddinstance
添加到您的$capabilities
数组中,具体取决于您的设置和实施方式。