Skip to main content

CiviCRM multilingual and customization: nice progress!

Today we've launched the 2012 French for the Future National Essay Contest. The full site is someone else's, but the contest submission pages are built using CiviCRM.

The essay submission pages are actually implemented as event registration pages of CiviEvent, which isn't exactly what CiviEvent is built for, but was close enough and provides some nice functionality that other alternatives (e.g. a simple CiviCRM profile) wouldn't provide.

Before starting, my biggest fears were around the custom presentation bits. My first CiviCRM implementation was back in 2006, and ever since then, my standard wisdom for anyone using CiviCRM is that CiviCRM is great as a CRM, but less great in exposing itself on your website. Partly, that's because CiviCRM is CMS agnostic, so it can't use all the great tools that I'm accustomed to with Drupal (notably the forms api), but also because of the whole Smarty/QuickForm architecture, which was okay for the day, but now way behind the competition.

On the other hand, CiviCRM has put a lot of work into improving this aspect over the past few years. My personal favourite trick, ever since learning jQuery and having that available for CiviCRM pages, is to use it via the theme layer or a custom module for almost any cosmetic changes. It's cheap, easy, safe and powerful. But it won't do functionality changes - for that, the new hooks are a nice complement.

Another great example - the new ability to add multiple profiles to event signups. Breaking up the fields into groups (which have to correspond to separate profiles), is both sensible from a useability point of view, as well as backend organization.

What I hadn't experimented with so much was the multilingual option, which until recently (i.e. mysql 5.1) required very unsafe mysql permissions for the site. But after one earlier success, I jumped in and have been surprised all the way along - the functionality has been perfect, and the administrative tools more than adequate. Particular thanks to DaveD for pushing forward the new "Word Replacement" feature (but no points for changing the name from string replacement and hiding it in the options section, I almost didn't find it!).

So my report from this project is: awesome, and thanks. I had a highly detailed-oriented client, and could satisfy almost all her requests.

CiviCRM also was able to import previous year's data, and next we'll be setting up donation pages and testing CiviMail.

Popular posts from this blog

The Tyee: Bricolage and Drupal Integration

The Tyee is a site I've been involved with since 2006 when I wrote the first, 4.7 version of a Drupal module to integrate Drupal content into a static site that was being generated from bricolage. About a year ago, I met with Dawn Buie and Phillip Smith and we mapped out a number of ways to improve the Drupal integration on the site, including upgrading the Drupal to version 5 from 4.7. Various parts of that grand plan have been slowly incorporated into the site, but as of next week, there'll be a big leap forward that coincides with a new design [implemented in Bricolage by David Wheeler who wrote and maintains Bricolage] as well as a new Drupal release of the Bricolage integration module . Plans Application integration is tricky, and my first time round had quite a few issues. Here's a list of the improvements in the latest version: File space separation. Before, Drupal was installed in the apache document root, which is where bricolage was publishing it's co...

IATS and CiviCRM

Update, Nov 2009: I've just discovered and fixed a bug I introduced in the 2.2 branch for the IATS plugin. The bug was introduced when i updated the API files from IATS and failed to notice that the legacy method for C$ one-time donations was no longer supported. If you're using a version greater than or equal to 2.2.7, and are using IATS for C$, non-recurring donations, then you're affected . To fix it edit the file : CRM/Core/Payment/IATS.php, and remove the line that looks like this: $canDollar = ($params['currencyID'] == 'CAD'); //define currency type The full fix removes a conditional branch based on that value a little further on, but by removing this line, it'll never actually use that branch. Drop me a line if you have any questions. Update, May 2009: This post is still getting quite a bit of traffic, which is great. Here are a few important things to note: The IATS plugin code is in CiviCRM, you don't need to add any code. Y...

Orchestrating Drupal + CiviCRM containers into a working site: describing the challenge

In my previous posts, I've provided my rationale for making use of Docker and the microservices model for a boutique-sized Drupal + CiviCRM hosting service. I've also described how to build and maintain images that could be used for the web server (micro) service part of such a service. The other essential microservice for a Drupal + CiviCRM website is a database, and fortunately, that's reasonably standard. Here's a project that minimally tweaks the canonical Mariadb container by adding some small configuration bits:  https://github.com/BlackflySolutions/mariadb That leaves us now with the problem of "orchestration", i.e. how would you launch a collection of such containers that would serve a bunch of Drupal + CiviCRM sites. More interestingly, can we serve them in the real world, over time, in a way that is sustainable? i.e. handle code updates, OS updates, backups, monitoring, etc? Not to mention the various crons that need to run, and how about things ...