Blocks: Filtered course list

Maintained by Picture of Kevin WiliartyKevin Wiliarty
The Filtered Course List block displays a configurable list of courses. It is intended as a replacement for the My Courses block, although both may be used. It is maintained by the Collaborative Liberal Arts Moodle Project (CLAMP).
451 sites
33 fans
Current versions available: 9

The Filtered Course List block displays a configurable list of courses. It is intended as a replacement for the My Courses block, although both may be used. It is maintained by the Collaborative Liberal Arts Moodle Project (CLAMP).

An administrator can apply various filters by which to organize a user's course listing in the block. Courses can be sorted by category, shortname matches or completion status. If all of the courses in a given semester have a shortname ending in a semester code, for instance, then the administrator can designate those courses to appear under "Current courses," "Future courses" or any other heading. Regex matching is supported.

Administrators can designate multiple collapsible headings and choose which of those headings, if any, should be expanded by default.

Other options include the ability to hide the block from guests or anonymous visitors, to choose whether an admin sees all courses or her own, and to hide or reveal a link to a more comprehensive course search.


Screenshot #0


Picture of Kevin Wiliarty
Kevin Wiliarty (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS


  • Picture of Kevin Wiliarty
    Mon, Feb 4, 2019, 9:19 PM
    Hi Nicolas, I've created and resolved an issue for applying filters to rubric headings and course titles. You can view it on Github at I have confirmed that this addresses the multi-language filtering in particular. I still need to backport this and test it for some earlier versions, and there is one more unrelated issue that I need to resolve, but I would hope to have a release some time this week.
  • Picture of Brandon Jimenez
    Mon, Feb 4, 2019, 10:43 PM
    Hello Kevin:

    In reading that line of code, i realized exactly what you wrote, that the filter will always get the courses that the user is enrolled in. That being said, due to some specifics of the site i work in, i have to show the combo list in the dashboard, instead of the Site Home, where said setting does exist. So i changed it to fetch all the courses in the site, then used your simplest example filter (category | collapsed | 0 (= top level) | 0 (= all decendants)) and it worked perfectly. My "suggestion" (i have no idea if it's even a suggestion) would be: is it possible to create a setting, a general setting, in which the user fetches all the courses, or just the enrolled ones? Something in the lines of :

    if ($setting == 1){
    $this->mycourses = enrol_get_my_courses(null, "$sortstring");
    $this->mycourses = coursecat::get(0)->get_courses(array('recursive' => true));

    However, i don't know if it would impact a lot your plugin.

    Anyway....thanks a lot! smile
  • Picture of Kevin Wiliarty
    Tue, Feb 5, 2019, 1:35 AM
    Hi, Brandon. While it would be possible to add a setting like that, I don't think an all-or-nothing approach would be very satisfying. It would apply to every filter in every instance of the block throughout an entire site. I can easily imagine that an admin might want to have some enrolment-aware filters alongside some enrolment-agnostic filters, for instance. Maybe a better approach would be to create distinct filters that have the alternate functionality you are looking for. Recent versions of the Filtered course list can use third-party filters, so you could even write your own to do exactly what you want. There's some documentation about how to do that here:, and I am happy to field any questions you might have. I think your filter you need to differ only slightly from the existing category filter.
  • Picture of Kevin Wiliarty
    Tue, Feb 5, 2019, 8:14 AM
    Hi Nicolas, I've just released v4.1.1 (for Moodle 3.6) and v3.4.3 (for Moodle 3.3, 3.4 and 3.5), both of which should be compatible with content filters. Let me know if you run into any difficulties.
  • Picture of Frédérique Seillec
    Mon, Mar 11, 2019, 8:39 PM

    I have the organization for my courses

    SCHOOL / YEAR / UNIT / courses
    I can only display with the plugin the level UNIT

    I'd like to display the SCHOOL and the YEAR ! Is it possible ?
  • Picture of Kevin Wiliarty
    Mon, Mar 11, 2019, 9:04 PM
    Hi, Frédérique. The Filtered Course List does not display nested rubrics, if that is was you are looking for, but you may be able to achieve what you want by some other method. Here are some ideas:

    1. If your course short names are systematic, you could probably create shortname or regex filters based on those. You would have to supply the SCHOOL / YEAR as the label. Depending on how many of those you need this might be impractical.
    2. If you are using a category filter, you could try setting the "Category rubric template" to include "ANCESTRY". That could work very well, perhaps in combination with including "CATEGORY" in the "Course name template."

    The second choice will perhaps be exactly what you want if you don't have any courses above the UNIT level.

    SCHOOL 1
    - YEAR 1
    - UNIT 1
    Course 1
    Course 2
    - UNIT 2
    Course 3
    Course 4
    - YEAR 2
    SCHOOL 2

    Give that a try and let me know if you have any other questions.

  • Picture of Brandon Jimenez
    Wed, Apr 10, 2019, 12:52 AM
    Hi Kevin

    I have two things to say, one comment and one question:
    Comment: Regarding our discussion a few months back, I tried your solution, but it wouldn't work, as the plugin would sort the data after it has already been fetched, and it only fetches the courses the user is already logged in. That being said, if it's just me who would benefit from a solution of those sorts, then i'll keep doing it on my end.

    For a different site, i'm trying to use your solution but i'm running short in understanding your documentation. My categories are as follows
    Category 1
    - Sub category 1
    -- course 1
    Category 2
    - Sub category 2
    - Course 2

    However, i tried building it using your documentation (and i need to replicate the structure), using
    category | collapsed | 0 | 0
    which should fetch all the subcategories from the top category, but only creates
    -sub category 1
    -- course 1
    - Sub category 2
    -- course 2

    and i tried using ancestries or
    category | collapsed | 2 | 0

    What am i doing wrong?

  • Picture of Kevin Wiliarty
    Wed, Apr 10, 2019, 1:49 AM
    Hi, Brandon, nice to hear from you again.

    About your comment:
    I'm afraid I'm not sure which suggestion of mine you're referring to. Did you try creating a filter of your own? If that is what you're doing then you should be able to fetch the courses any way you like. Or are you doing something else? I'll be happy to help, but I don't yet understand what you are describing.

    About your question:
    The results that you are describing are expected if your structure is like this:
    Category 1
    - Sub category 1
    -- course 1
    Category 2
    - Sub category 2
    -- Course 2

    What I've listed above is slightly different from your version, but maybe it's what you meant, because that would explain the output. It often trips people up that the filtered course list does not recreate a category hierarchy. It's just not what it does. It can scan down into categories to find a user's courses, but it doesn't try to represent the whole tree. When it finds a course, it will show that course under a rubric based on the category it is in, even if that category is several levels deep. In your case, if the user is not enrolled in any courses directly in Category 1 or Category 2, then those categories will not show up. If the hierarchy is important then it may help to modify your "Category rubric template." If you change that template to "ANCESTRY / NAME", for instance, you are asking the block to display the rubric title as a string that consists of the category's ancestry and then the category name. Applied to the example above you ought to get:

    Category 1 / Sub category 1
    - course 1
    Category 2 / Sub category 2
    - Course 2

    It's still not a tree; it won't ever be, but at least in the label for the rubric you can see the hierarchy. The main idea behind the configurable templates is to help resolve ambiguities. Imagine you had a structure like the following:

    - History
    -- History 101
    - History
    -- History 101

    In a case like this the default templates would yield:

    - History 101
    - History 101

    That's not so helpful, but you can change the category template to something like "NAME (PARENT)" to yield:

    History (2019)
    - History 101
    History (2020)
    - History 101

    Does that help?

    If the behavior you're seeing is different, please give me as many details as you can, and I will do my best to help sort it out.
  • Picture of Brandon Jimenez
    Wed, Apr 10, 2019, 2:21 AM
    Hi Kevin

    Ok now I understand, but this issue seems to be something that i've seen several user asked (the ancestry question). Can we make this into a request for a future version? (version 4.1.3 for example? - I joke)

    As usual, thanks for your support.
  • Picture of Kevin Wiliarty
    Wed, Apr 10, 2019, 4:25 AM
    I know that the flatness of the structure sometimes disappoints people but I don't really foresee trying to change it. It's baked pretty deeply into the way the block works, and it's a good fit with the other filter types. Anyway, it sounds like my explanation was helpful, so I'm glad of that.
  • Picture of Jonathan Tulloch
    Fri, Nov 15, 2019, 4:43 PM
    Hi Kevin! The updates to this block are brilliant, and we are looking to make this a core part of student navigation advice - but I was wondering whether it is possible to change the restriction that the block only appears on the Dashboard? We can't seem to change this setting! Cheers! Jon
  • Picture of Kevin Wiliarty
    Fri, Nov 15, 2019, 9:27 PM
    Hi, Jonathan. I'm not sure what restriction you are referring to. You should be able to place instances of the block anywhere you like. Can you explain a bit more about what you are trying to do and what is not working as expected? Can you also mention which version of the block you are using and which version of Moodle? I'll be happy to help sort things out.
    Sat, Feb 22, 2020, 5:40 AM

    Hi Kevin. Could you have a filtering by categories and completion status at the same time? Cheers!
  • Picture of Brandon Jimenez
    Sat, Feb 22, 2020, 9:29 PM
    Hello Alexander, I think your best bet would be to use the API to create that functionality yourself. I haven't done it personally, but from what I've read in the documentation, it seems it could provide you with that kind of behavior.
  • Picture of Kevin Wiliarty
    Mon, Feb 24, 2020, 8:11 PM
    Hi Alexander, There's no ready-made filter that would simultaneously organize by category and completion status. Brandon is correct: Your best bet would be to write a filter of your own. This page has some instructions:
Please login to post comments