This is copied from my post on the Canvas Community Blog about creating dynamic syllabi in Canvas:
A method for minimizing the work involved in copying and creating courses by reusing content using php and a database.
I have 14 different courses I teach and sometimes different versions of those courses (full-term, half-term, etc). My current method includes some steps that are meant to be efficient (always open to efficiency suggestions), and some time-wasters:
- Every course has a sandbox so one-off changes to not affect future semesters.
- Ongoing changes are made to sandboxes at the same time I make the changes in the live course.
- For adjusting dates: THIS IS THE BIGGEST TIME WASTER! We need a better method for this in Canvas.
- I have an unpublished page at the top of every course called “Teacher Setup” where I keep notes of things inside the course that might need adjusted. This is usually an instruction page that includes the day of the week that assignments are due. This things are also usually highlighted so I can find them quickly.
- I open every syllabus and change the SAME information in each one: term title/date, course withdrawal date, due dates for specific papers, etc.
- If there are any other changes to the syllabus for that particular course at any time, I have quite a few courses to open and verify that all syllabi are the same. I also am responsible for making sure the adjuncts in my department update their syllabi to match.
This semester I decided to address the last 2 time-wasters: Syllabus editing.
I think quite a bit like a programmer, so I realized that I need to understand which parts of the syllabus are course-specific, which are teacher-specific, which are semester-specific, and which are college-specific.
- The semester date (Fall 2017) and withdrawal date are semester-specific.
- The teacher contact information is Teacher-specific.
- The course description and credit information is course-specific.
- All the legal mumbo-jumbo in the bottom are college-specific.
The next step was to realize that this could all be automated if the information was contained in separate locations (like a database) and pulled together when the page was created. This just means a server-scripting language to create the page on-the-fly, so I used PHP because I’m familiar with it.
I created 3 tables:
I created a PHP page that requires some information to be posted with the url request. That means when you type “www.example.com”, you add a question mark and the data you want to pass to the server like so:
The entire url looks like this:
Then I created a php page (you have to find a place to host this page) in which I hard-coded the college-specific information. I decided there was no need to place this in a database since this would be the same in every syllabi. If I need to update college-specific legal wording, I can change it on this page and it will change in all my syllabi.
In this php page there are then php scripts that call the information needed from the database based on the data passed in the URL. So if the url says “teacher=bryn”, the page looks in the teacher table for “bryn” and pulls out my contact info and outputs it in the html page.
The same is done for course information and dates. It took some playing with different methods to find what worked for me the best, but I ended up storing html code in the data base for each section. The php page queries the database for information and if a specific piece of information doesn’t exist for a particular course, then that section is left out of the syllabus.
The final step was to edit the syllabi to embed my php page in an iframe. iframe are not a great choice because content is hosted off-site, but unless I have more flexibility (including coding) within Canvas, this is the only choice I have. iframes are also tricky because height cannot be dynamically created so one has to guess a good height and put up with scroll bars when the page is too short or too narrow. Still, this is such a time-saver that it is worth the slight annoyance of scroll bars.
From now on, when I start a new semester I have many fewer steps:
- Create a new semester in the “semesters” database with relevant dates. Takes about 30 seconds.
- If there are any syllabi changes, make them in the database. Changes here will be infrequent.
- If the college’s legal part of the syllabus has changed, make those changes in the php page. Again, infrequent.
Then when I copy the sandbox I only need to edit one thing: the url for the iframe in the syllabus.
I have to change:
That’s it. Easy-peasy, right? Saves me about an hour each semester.
I realize most teachers do not know php or mysql, or have access to php and database hosting. But for any of you who are programmers or admins, there might be some real advantages to this. Imagine if all syllabi on your campus referred to a database for the legal info. You would only have to make changes in ONE place and all syllabi across your campus would be updated. Ditto for published course descriptions or teacher contact info.
And at the very least, I hope you find this interesting.
And now if only I can think of a way to handle assignment dates. . .