7 June 2010
I’m currently developing some Drupal 7 instructional videos for lynda.com. The company likes to offer “exercise files” for their courses so folks can jump in in the middle. In other words, someone could start at Chapter 5 by loading the Chapter 5 exercise file, which would make the site appear as though all the exercises from Chapters 1-4 had already been completed. A course would have at least a half-dozen such files (if one per section), and possibly as many as 70 (if one per video, as is preferred).
This has proven very difficult in Drupal. In Drupal Essential Training (2008) we included a .sql file at every step, but that didn’t put assets in their proper directories. We included graphics wherever they first appeared, but that meant a user would have to go through all previous chapters to find the assets and load them up. That also didn’t address the issue of modules and themes. It’s been a support nightmare.
An ideal exercise file would:
- import content and settings into the database;
- put assets (such as graphics) in the correct directories;
- install and enable the latest versions of specific modules (preferably by grabbing them live from drupal.org);
- configure it all; and
- be installed through a process that beginners could understand from a well-made three-minute video.
Oh, and the proposed solution must be available soon for Drupal 7 — for instance, modules that carry the D7CX pledge. And because people will be watching these courses until Drupal 8 comes out, it also has to take into account future versions of Drupal 7. That’s why I hope I can find something that grabs “live” modules and themes, rather than packaging them in the exercise files themselves. (That’s not essential, though, as users could just use Drupal 7’s new Update features to bring the software up to date.)
I posted this question to a mailing list for Drupal consultants and got some good advice. But none of the recommendations seems to really solve the problem. The options — and their drawbacks — appear to be:
- Demo. Only manages the database. Doesn’t do anything with site assets, modules, etc.
- Drush, perhaps with a custom command. Hard to use, but perhaps promising? I only use it rarely and am unclear on how it would work.
- Features. Not promised for Drupal 7. I watched this video about Features by Mustardseed Media and think it’s only a partial solution since it doesn’t appear to save content. But maybe we could include a Feature module for each chapter and a database.
- Patterns. Not promised for Drupal 7; in fact the Drupal 6 version is still only “-dev”.
- Installation profiles. I like this because it could contain everything: files, assets, and database settings. The user would have to reinstall a complete copy of Drupal each time, but that’s fine.
- A hosted service such as WebEnabled. (That’s how TopNotchThemes lets users try out their themes before buying.) Presently too complicated for lynda.com’s audience, but that could change. And would the user pay for this external service, or would lynda.com? Currently, people who buy lynda.com’s exercise files download and own them, so a hosted service would be a big business-model change.
- A version-control system such as GitHub. Same problems as other hosted services, and currently far too complicated for lynda.com’s audience.
I doubt many people will have read this post down to here. If you’re one of them, here’s a secret opportunity… shh…. 😉
Any answer we find will need custom development. I’m not a programmer; I can’t do it. The ideal solution would be a module that takes a snapshot that meets all our criteria and packages it up into a downloadable file. I’m looking into funding such a module, which would then be released back into the community under the GPL.
I talked to one developer I admire a great deal; he believed it would take 9-12 weeks and cost $10,000, which is WAY beyond what I could raise. I suspect he missed some easier options (such as modifying one of the solutions above). If you think you can do it — or can make any suggestions — I’d love to hear them!Web development