Replacing the built-in Open edX forum with a suitable alternative
Posted on Thu 02 February 2017 in hints-and-kinks • 3 min read
Open edX comes with a built-in discussion forum service. Many Open edX users find this service less than optimal: it is the only edX service to require Ruby, it depends on a Ruby version that is outdated and no longer receives security updates (although a fix for that is on the way), it and generally feels like overkill to many users.
Thankfully, since the Open edX Eucalyptus release it’s been quite easy to replace the course forum with an alternative. Here at hastexo, we’re fans of Disqus (you may have noticed we also use it around out web site), so let’s see what we can do to drop the Open edX Forum and replace it with Disqus.
Step 1: Locate your course’s policy.json
file
If you keep your course materials in Git or some other version-controlled repository, you’ll already be familiar with the directory structure of an OLX course tree. If you’re not, just use edX Studio to export your course into a compressed archive, download it, and extract it on your local machine.
Locate the policies/_base
directory. Find the policy.json
file
located therein. It might look like this:
{
"course/201702": {
"language": "en",
"invitation_only": true,
"start": "2017-02-01T00:00:00Z",
"advertised_start": "2017-02-01T00:00:00Z",
"end": "2017-02-28T23:59:59Z",
"is_new": true,
"catalog_visibility": "both",
"max_student_enrollments_allowed": null,
"due": null,
"giturl": null,
"course_image": "images_course_image.jpg",
"advanced_modules": ["hastexo"],
"hide_from_toc": false,
"ispublic": false,
"rerandomize": "never",
"show_calculator": false,
"showanswer": "attempted",
"days_early_for_beta": null,
"discussion_topics": {
"General": {
"id": "i4x-hastexo-hx212-course-201702"
}
},
"tabs": [
{
"name": "Courseware",
"type": "courseware"
},
{
"name": "Course Info",
"type": "course_info"
},
{
"name": "Textbooks",
"type": "textbooks"
},
{
"name": "Discussion",
"type": "discussion"
},
{
"name": "Wiki",
"type": "wiki"
},
{
"name": "Progress",
"type": "progress"
}
]
}
}
Note the tabs
list. It contains the list of course tabs
(which edX Studio, confusingly, calls “pages”).
Step 2: Remove the default Discussion tab
You can now edit policy.json
, and drop the Discussion
entry from
the tabs
list, to make it look like so:
"tabs": [
{
"name": "Courseware",
"type": "courseware"
},
{
"name": "Course Info",
"type": "course_info"
},
{
"name": "Textbooks",
"type": "textbooks"
},
{
"name": "Wiki",
"type": "wiki"
},
{
"name": "Progress",
"type": "progress"
}
]
Maybe you also want to remove the course wiki. Just keep whichever tabs you’d like to keep.
Step 3: Add a “static” tab
In place of the old Discussion
tab (which, you may have noticed, was
of a special type conspicuously named discussion
), you can now put a
tab of different, simpler type: static_tab
. Like so:
"tabs": [
{
"name": "Courseware",
"type": "courseware"
},
{
"name": "Course Info",
"type": "course_info"
},
{
"name": "Textbooks",
"type": "textbooks"
},
{
"name": "Discussion",
"type": "static_tab",
"url_slug": "discussion"
},
{
"name": "Wiki",
"type": "wiki"
},
{
"name": "Progress",
"type": "progress"
}
]
Note that a static_tab
type tab also requires a value
url_slug
. What’s that one about, you ask?
Step 4: add static content
Whatever you put into url_slug
tells Open edX to go look into the
tabs
subdirectory of your course root, and find a properly named
file there. In our case, that file needs to be named
discussion.html
, because we defined "url_slug": "discussion"
.
So, head over to Disqus and grab the generated code from there, and
then stick it into tabs/discussion.html
. Something like this:
<div id="disqus_thread"></div>
<script>// <![CDATA[
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = '//<your Disqus site domain name>/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
// ]]></script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<p></p>
Step 5: deploy
Re-compress your tarball,
upload to Studio
or run
manage.py import
,
and you’re done!
This article originally appeared on the hastexo.com
website (now defunct).