我认为让学生隐藏的方法不止一种方法。
1
Hide the block
2
Assign role to block and set permission to block
但这些是由管理员通过更改设置完成的。我需要一种代码方式。如何编写代码以使该块对学生不可见。
通过更改 db / access.php
来activity I can make invisible the activity
'mod/questionbank:view' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
//'guest' => CAP_ALLOW,
//'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
像这样如何通过代码使学生对学生不可见。
修改
根据达沃斯史密斯的回答。
我放入get_content
函数
if (!has_capability('blocks/blockname:view')) {
return null;
}
blocks / blockname / block_blockname.php 中的
并在我的 blocks / blockname / db / access.php 中包含:
'blocks/blockname:view' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
//'guest' => CAP_ALLOW,
//'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
// 'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
)
),
但它导致错误页面说
检测到编码错误,必须由程序员修复:PHP catchable 致命错误
答案 0 :(得分:1)
对于任何块,如果get_contents返回null(并且编辑关闭),则不会显示该块。
因此,将以下内容放在块的get_content函数中(但放入您在db / access.php中定义的实际功能):
if (!has_capability('block/myblock:somecapability', $this->context)) {
return null;
}