2013-04-27 124 views
2

我正在爲Moodle開發一個模塊。我已經實現了在一門課程中安裝並實例化它。問題是,在啓用「編輯模式」,Moodle的我出以下信息:Moodle模塊MYMODULE沒有定義標準功能

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的。我已閱讀下列文件:

但我還沒有澄清什麼。

EDITED 2013年4月28日

我加入這個代碼,我access.php文件($功能陣列):

'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

錯誤消息中沒有提到「access.php」。也許問題出在'view.php'中? – ASGM 2013-04-27 18:02:12

+0

我不認爲問題出在文件view.php中,因爲我在課程活動列表中獲取此消息,而不是在mymodule視圖中。當我在mymodule視圖(view.php)中輸入時,不要顯示任何問題。 – Lobo 2013-04-27 18:30:26

+0

你使用的是Moodle 2.4或以上版本嗎? – ASGM 2013-04-28 08:53:24

回答

2

起初它看起來像一個奇怪的錯誤信息,因爲它提到了mod/mymodule:addinstance但你沒有在你的代碼中。但仔細觀察,這似乎是問題--moodle希望你定義addinstance,但你不知道!

這顯然是從2.4開始一個新的行爲:http://docs.moodle.org/dev/Blocks#db.2Faccess.php

的解決方案似乎是添加addinstance(也可能myaddinstance,根據您的設置和執行),以您的$capabilities陣列。

+0

閱讀您的解決方案,我將其添加到我的訪問中。PHP: 'MOD/MyModule的:myaddinstance'=>數組( \t \t \t \t 'captype'=> '寫', \t \t \t \t 'contextlevel'=> CONTEXT_SYSTEM, \t \t \t \t '原型'= >陣列( \t \t \t \t \t \t '用戶'=> CAP_ALLOW \t \t \t \t), \t \t \t \t \t \t 'clonepermissionsfrom'=> '的moodle /我的:manageblocks' \t \t) \t \t \t \t 'MOD/MyModule的:addinstance'=>數組( \t \t \t \t 'riskbitmask' => RISK_SPAM | RISK_XSS, \t \t \t \t \t \t 'captype'=> '寫', \t \t \t \t 'contextlevel'=> CONTEXT_MODULE, \t \t \t \t '原型'=>數組( \t \t \t \t \t \t 'editingteacher'=> CAP_ALLOW, \t \t \t \t \t \t '經理'=> CAP_ALLOW \t \t \t \t), \t \t \t \t \t \t 'clonepermissionsfrom'=> '的Moodle /網站:manageblocks' \t \t), – Lobo 2013-04-28 09:37:01

+0

這不作品。 – Lobo 2013-04-28 09:38:38

+0

我已經更新了這個問題。 – Lobo 2013-04-28 09:59:54