我安装了 Moodle 4.4.3。系统中添加了多个课程。我可以访问 Moodle API。我正在使用 API 调用core_course_get_contents
我的其中一门课程的内容。以下是响应:
[
{
"id": 38,
"name": "Section Title",
"visible": 1,
"summary": "",
"summaryformat": 1,
"section": 1,
"hiddenbynumsections": 0,
"uservisible": true,
"modules": [
{
"id": 21,
"url": "https://example.com/mod/wiki/view.php?id=21",
"name": "Reading materials",
"instance": 5,
"contextid": 44,
"visible": 1,
"uservisible": true,
"visibleoncoursepage": 1,
"modicon": "https://example.com/theme/image.php/boost/wiki/1727859606/monologo?filtericon=1",
"modname": "wiki",
"purpose": "collaboration",
"branded": false,
"modplural": "Wikis",
"availability": null,
"indent": 0,
"onclick": "",
"afterlink": null,
"customdata": "\"\"",
"noviewlink": false,
"completion": 0,
"downloadcontent": 1,
"dates": [],
"groupmode": 0
}
]
}
]
课程页面包含 1 个添加了 Wiki 活动的条目。我了解到 ID=38 是课程页面上的条目“章节标题”,而 ID=21 是 Wiki ID。然后我使用 Moodle API 调用mod_wiki_get_page_contents
尝试pageid=21
获取 Wiki 活动的内容。但是响应并未显示 Wikipedia 的内容,而是显示其他页面的内容:
{
"page": {
"id": 21,
"wikiid": 19,
"subwikiid": 18,
"groupid": 0,
"userid": 0,
"title": "Home",
"cachedcontent": "(Wrong content here)",
"contentformat": 1,
"caneditpage": true,
"version": 106,
"tags": []
},
"warnings": []
}
在正确的 Wiki 页面的网页中,从编辑按钮的链接,我可以猜出 Wiki 的 ID 是7
而不是21
,但 ID=7 没有出现在任何响应中。当我使用mod_wiki_get_page_contents
和 时pageid=7
,它会显示正确的内容。
我的问题是:如何利用 Moodle API 获取 ID=7?
谢谢。
从原始响应来看 - '21' 是“课程模块 ID”(无论活动类型如何,这个数字都是该活动独有的 - 例如 21 是本课程中的一个 wiki,22 可能是论坛实例,23 可能是作业,24 可能是另一个 wiki)。从本质上讲,这是 mdl_course_modules DB 表的 ID。
'5' 是“实例 ID” - 它标识特定的 wiki(也可以有“实例 ID”为 5 的分配、“实例 ID”为 5 的论坛等)。从本质上讲,这是 mdl_wiki DB 表(或 mdl_assign 或 mdl_forum 表,适用于这些活动类型)的 ID。
如果您使用这个“实例 ID”(共 5 个),您可以通过调用获取该 wiki 活动内的所有页面的列表
mod_wiki_get_subwiki_pages
(如果只有 1 个子 wiki,那么将返回该子 wiki 的页面,否则您可能需要指定您想要获取页面的 wiki 内的用户或组)。的响应
mod_wiki_get_subwiki_pages
将包括每个页面的“id”,然后您可以将其输入到中mod_wiki_get_page_contents
,以获取您正在寻找的内容。