There were two projects in getting CitizenSpeak up and running: Developing the CitizenSpeak module and creating the CitizenSpeak site. While they were intertwined, they also provided distinct educations.
I found that the I18n module can serve dual purposes; it provides the Spanish language interface to the site as well as allowing us to customize standard English language messages. This is handy if you want customized labels for things, or your site isn’t as averse to capital letters as the Drupal project.
As an aside, only recently did I learn that name “I18n” is an abbreviation for the “Internationalization,” since “nternationalizatio” is 18 letters. I guess I just never bothered to count.
I was also happy to learn how to customize the output of other modules. The PHPTemplate and Smarty engines allow designers to customize how specific node types are displayed, what information is available to templates, and override any theme() call.
There are some lessons learned from what I did wrong, too. The first was choosing Smarty as the theme engine. While I’ve had good luck with Smarty in my own projects, the majority of work being done with Drupal seems to use PHPTemplate.
There’s nothing wrong with Smarty, the PHP library. For Drupal, however, there is a lot more support available for PHPTemplate, and PHPTemplate more likely to be kept up to date. Drupal’s PHP functions are more than adequate for theming, which negates Smarty’s advantage of having view-centric functions available to it.
I also wish I had created a site-specific module. A module is a great place to create custom pages and blocks, to use callback hooks like hook_nodeapi() and hook_user(), and to collect helper functions. A lot of things I did by customizing the display interface and variables could have been more elegantly handled by simply creating a module for the CitizenSpeak site and stashing everything there.
That about wraps up my posts on building CitizenSpeak. Please visit the site (maybe even click that donate button on the right), and thanks for reading.