CMS Match is a community-driven database of content management systems, shopping carts and discussion boards. Each software title is built on hundreds of CCK fields representing a score for software features such as 'static page caching' or 'W3C compliance'. The power of CMS Match is that registered users may update these scores in real-time. CMS Match is a Web 2.0 crowd-sourced software comparison tool.
The database of thousands of titles is brought to life using:
- Apache Solr's faceted search integration
- Opencalais RDF semantic web
- Views, CCK and Panels
- Data visualization with OpenFlashChart API
Morningtime built the CMS Match site with Drupal 6. A big issue with a crowd-driven database is potential abuse and security. The solution was found in the UserPoints suite, integrated with Rules and VoteUpDown to monitor user actions. The website is now built in such a way that minimal human moderation work is required; users with too many negative actions are automatically demoted to a user group without editing rights.
Building the site
Content Construction
A great deal of time went into the conceptual development of the underlying CCK system. The power of CCK is combined with the Computed Field extensions and a modified Editablefields extension. That combination now enables users to update individual fields without granting them access to the actual node. This was an important requirement to prevent large-scale abuse.
Data Visualization
A problem with the large dataset was how to present a snapshot overview of all different categories. Drupal has a chart extension which integrates with Teethgrinder's OpenFlashChart library, an open source tool to generate beautiful flash charts. The visual data represents computed summary scores for all the functional categories, such as software performance, security and interoperability.
Comparison Output: Views
Using Views 2, the CCK data is presented in many different ways. Not just paginated lists, but also comparison tables listing software data side by side. Views is also used to expose blocks with custom filters, to help users find titles matching certain criteria. In effect, Views and the exposed filters helped to create a custom advanced search page.
Faceted Search: Apache Solr
Apache Solr is built on the Apache Lucene search library. CMS Match replaced the standard Drupal search system with this Java / Tomcat based search engine. Apache Solr is faster, more reliable and provides faceted search. For example, software title search results can be filtered by license type (GPL, OSL, etc.).
Boosting Performance
A downside of having such a complex website is performance. Each software title displays hundreds of CCK fields, computed scores, data visualisation and so on. Most pages come in at 100kb of clean HTML. A great solution was found in the Boost module. Boost is a live static page caching system which completely bypasses the Drupal PHP engine. Using a set of .htaccess rules, all requests to Drupal are forwarded to a cached and gzipped static HTML page. Without boost, CMS Match's hosting costs would increase four-fold.
Modules used
The most important modules used for this project are:
- Boost - static page caching
- Views - displaying data in many different ways, such as comparison tables
- CCK - building the forms to enter and edit data
- Amazon - to show related Amazon products such as user manuals
- Apache Solr - faceted search engine
- Opencalais and RDF - semantic web integration
- Location and Gmap - Google Maps location integration for nodes and users
- Link Checker - to manage broken links to external sites
- UserPoints and contributed modules - to reward or punish user actions, with Rules and Actions integration
- WYSIWYG and IMCE - tools to edit content and upload images
See the gratitude page at CMS Match for a more extensive list.
Comments
Congrats for coming up with a
Congrats for coming up with a good drupal implementation... I liked the way you have presented comparison charts and tables here http://www.cmsmatch.com/compare/content-management-systems/146+149+44+15...
Please provide some more details on how you implemented these?
Thanks,
Tony