构建一个<select>,显示特定类别和类别子项的课程

时间:2016-10-10 11:35:40

标签: moodle

我正在使用Moodle 2.9.7 我想获得一个特定类别的课程列表,还有类别的儿童类别课程(如果存在的话)。 这应该在选项将是课程列表的地方进行 我几乎是moodle的新人,所以无法想象或设置我将如何做到这一点的线索。 如果有人能帮助会很棒。 谢谢

1 个答案:

答案 0 :(得分:0)

从头到尾我会选择这样的东西:

$categoryid = 1; // Change this.
$category = coursecat::get($categoryid);
$childrencategories = $category->get_children();
$coursesincategory = $category->get_courses();

使用coursecat的好处是它不会显示当前用户看不到的类别。

要构建选择框,您可以在扩展html_writer类时决定使用selectmoodleform元素。在Moodle中有很多后者的例子。

测试文件

这是一个测试文件,您可以将其命名为test_coursecat.php,并放置在Moodle的根目录中,index.php位于该位置。通过yoursiteurl/test_coursecat.php访问它,您可以选择添加?categoryid=NUMBERHERE来更改要开始的类别。

<?php

// Require config.php, and coursecatlib.
require('config.php');
require($CFG->libdir . '/coursecatlib.php');

// Get the parameter 'categoryid' passed via GET parameter. Else the value will be 0.
$categoryid = optional_param('categoryid', 0, PARAM_INT);

// Require a user to be logged in to access this page.
require_login();

// Set the minimal page requirements.
$PAGE->set_context(context_system::instance());
$PAGE->set_url('/test_coursecat.php');

// Start the output.
echo $OUTPUT->header();

// Fetch out root category with ID $categoryid.
$rootcategory = coursecat::get($categoryid);

// Get 2 sub categories.
$categories = $rootcategory->get_children(array('limit' => 2));

// Output each category fetched, and their associated courses.
echo '<pre>';
foreach ($categories as $category) {
    echo $category->name . PHP_EOL;

    foreach ($category->get_courses() as $course) {
        echo ' - ' . $course->shortname . PHP_EOL;
    }
}
echo '</pre>';

// End the output.
echo $OUTPUT->footer();