Case Study: FundraisingOnline (Dutch) - The largest online fundraising database in the Netherlands
The Dutch language website FondswervingOnline.nl (or "Fundraising Online") is the largest online fundraising and subsidies database in the Netherlands. The website offers businesses and NGO’s access to a community with the latest public data on subsidies, sponsorship opportunities, government funding, private investors, prizes, microcredits and more.
The initial goal of the project was to build the best possible website in its niche. We looked at Efactor.com (an entrepreneur community) for inspiration and we asked ourselves if it were possible build a similar community with Drupal. We believe it can! Our registered users have access to a mini-Facebook profile with status and activity updates. Based on the user preferences, members with identical interests are matched and can find each other, for example to cooperate in a joint fundraising application. Community pages and a forum are available to share user interests.
All content is produced in-house and the database offers over 2,500 investment and fundraising opportunities and 1,500 news articles. An earlier version of the website was chaotic and difficult to use. With Drupal we were able to overcome this obstacle. Using Drupal’s built-in taxonomy system, all content is now categorized into eight main vocabularies, such as financing type, organization name, geographic region and area of interest. That taxonomy data is used throughout the site to show blocks of related content, lists of relevant items and to build filterable views of content.
The business model evolves around the premium content module, which shows public teasers but hides the full body. A growing number of 1,000+ subscribers pay an annual fee to get full access to the database. Payments are processed through Ubercart. After valid payment, via PayPal or iDEAL, new members are automatically assigned to the premium user role.
Site Layout and Features
The most important aspect of the project was to make content accessible, searchable and well-organized. We achieved our goals using mostly existing Drupal community modules. In short, the website's user experience evolves around four main "hinges":
- Multiple taxonomy vocabularies form the backbone of the content structure;
- Apache SOLR search is integrated throughout the website to provide relevant results and related content;
- Data is presented to the user through Views (a UI for building queries) and Panels (customizable mini-layouts);
- Exploded navigation menu’s, or “mega dropdown menus” populated with Views and Panels.
1. Taxonomy and vocabularies
All of the 4,000+ nodes are tagged with relevant taxonomies. We organized all content into the following categories.
-
Content "backbones" (providing a main guide for navigating through the site)
- Areas of interest
- Activities (themes or topics)
-
Content "attributes" (to reduce search results to specific items)
- Financing type (subsidies, funds, prizes, micro credits etc.)
- Financing stage (startups, early stage, expansion etc.)
- Organisation name
- Target region (e.g. Belgium, Amsterdam)
- Organization type (non-profit, business, private individual)
- Status (dropped, under review, etc.)
Note that we do not use sub-categories. Each vocabulary is stand-alone, which allows for flexible combinations to pinpoint specific content. For example, it allows us to specifically find funding for a non-profit education startup in Amsterdam, the AUV Fund (search result provided by Apache SOLR).
2.Faceted Search with Apache SOLR
This brings us to faceted searching with the Apache Solr Java engine and the Drupal Apache Solr Search Integration project. In our case, Apache SOLR runs off a separate Tomcat/Java instance. This keeps the load off MySQL for complex search queries. The Drupal Solr module offers two impressive features: 1) filterable search results or “faceted searching” and 2) “more like this” blocks for each selected taxonomy vocabulary.
We felt it should be easy to find specific content relevant to people's needs. This was a major concern and Apache Solr fits right in. The "more like this" blocks are perfectly capable of matching side content with the main article. Not only is content compared with taxonomy tags, but also by the content’s body text and title. Visitors and registered members can quickyl find exactly what they are looking for.
There are other "more like this" modules out there, like RelatedContent, Relevant Content and MoreLikeThis (with OpenCalais semantic search integration). We tried all of them and from our own experiences we would recommend using Apache Solr and its "more like this" blocks.
3. Content Presentation with Views and Panels
The Fondswervingonline homepage is completely built with Views and Panels. From top to bottom, the header bar consists of a navigation area with multi-column "mega dropdown menu's", which in fact are custom built using views and panels (within a jQuery dropdown action).
Further down a three-column panel shows latest news and other custom content listings. Our content types are customized using CCK (Content Construction Kit).
The middle section is inspired by CNN.com’s bottom topics grid showing latest items. We basically built a similar grid for our own “areas of interest” backbone vocabulary. This is easy to do with Drupal: create 16 separate content lists with the Views module, save them as Views panes and place them inside a 4x4 custom grid built with the Panels module. Specifically as a mini-panel. Mini panels are blocks that you can put into your theme's template regions. (Our homepage layout is based on a page-front.tpl.php with custom layout regions.)
4. Exploded Navigation or Mega Dropdown Menu's
The exploded menu's, or mega dropdown menus, serve as a quick access point to all content. There is no such dropdown menu available as a Drupal module, but you can easily create one yourself with Drupal's built-in jQuery, and again using the Views and Panels modules. The mega dropdowns are simply multi-column mini-panels (Drupal blocks) populated with custom views. The advantage of such navigation menu's is that menu items are automatically refresh whenever new content is added. We even use an AJAX pager in the Themes dropdown.
Performance
Performance deserves its own chapter. As you might expect, the complex Views, Panels, Apache Solr search filters and its related content blocks put a heavy load on the server. At first, performance was problematic. But we figured the Drupal community would have some solutions for us. Here's a list of the most important performance measures we took:
-
Anonymous users
- Install Pressflow. "Pressflow is a distribution of Drupal with integrated performance, scalability, availability, and testing enhancements". Pressflow removes redundant backwards compatibility code, making it fully optimized for PHP5 and MySQL5, while still maintaining backward compatiblity with any Drupal module. At the same time it adds extra caching features and provides support for MySQL replication (which we did not use for this project).
- Boost module for static HTML caching. The Boost module is a real lifesaver. In our case, the difference between using Boost and not using Boost means handling 200 simultaneous visitors or having a server meltdown.
-
Logged-in users
- Block cache alter. This is a lesser-known module that allows blocks to be cached even when using node access modules. It allows to set block-specific caching and refreshing options with a small override to the core block module. Normally, the default Drupal block caching is disabled when using node access module. This module circumvents that limitation.
- Memcache API module - PHP memcache is also used by high-traffic sites like Facebook and Digg.
- Install APC Cache. The PHP-APC module is an op-code cache which speeds up PHP page "compilation". We didn't integrate this directly with Drupal, but APC nevertheless enhances PHP code on the fly, as it runs as a server process.
- Views cache. This is easily overlooked, but views actually have an internal caching setting. This should be turned on for production sites, e.g. cache for 1 hour, 6 hours or 6 days, depending on the type of content.
- CSS Gzip
- Javascript Aggregator
The site runs on a small dedicated CentOS server and now easily handles 200+ simultaneous visitors on minimal RAM, with a very reasonable server load.
Drupal Modules That Were Used
This list include all the modules we used, except for absolutely general modules, hopefully giving people some direction to create a site like ours. It's also our way of saying "thanks" to all the genius module developers out there.
Site Administration
- Ad, Admin role, Administration menu & toolbar, Advanced user management, Backup and migrate, Better formats, Contact Form Blocks, Custom Breadcrumbs, DB Maintenance, Draggable Views, Fasttoggle, Flag, Flag Weights, IMCE, IMCE Wysiwyg API Bridge, Path Filter, Path redirect, Pathauto, Pathologic, Rules, Scheduler, Tab Tamer, Vertical Tabs, Views Bulk Operations, Views Custom Field, Views Groupby, Webform, Webform blocks, Wysiwyg, XML Sitemap
Taxonomy / vocabularies / categorization
- Edit Term, Mass change, Mass tag, Taxonomy Image, Taxonomy Import/Export via XML, Taxonomy Manager, Taxonomy Multi Editor, Taxonomy VTN, Taxonomy Hide, Taxonomy Title, Suggested terms
Performance
Theming, fancy stuff
- Block Class, ImageMagick Raw, ImageAPI, ImageCache, ImageCache Profile Pictures, Lightbox2, Views Carousel, Views Slideshow, Rubik theme
Search, Apache SOLR
Community and user
- Me aliases, Activity, Comment form above comments, Email Marketer for Interspire, Favorites, Follow, FAQ, Invite, Login destination, LoginToboggan, Mollom, Profile taxonomy, Role Expire, Twitter
Ecommerce
- Ubercart, iDEAL Payment Pro (Dutch market)
Content
- Autocomplete widgets, CCK, Cumulus tag clouds, Date, Filefield and Imagefield, Galleria, Link, Locale Updater, Menu access, Menu class, Menu trails, Messaging, Notifications, Panels, Multiblock, Node Type Filter, Nodeaccess, Nodewords, OpenSearch Plugin, OpenSearch feed, Page Title, Premium content, Print, Read more link, Quick Tabs, Tagadelic
Credits
This project is developed for content provider Tekst en Uitleg BV from Schoonebeek (The Netherlands). Drupal development and project strategy made possible by Morningtime Digital from Munich (Germany) in collaboration with design studio REM-ART from Antwerp (Belgium).
Drupal version: Drupal 6.x