Opublikowane
2009-05-16 22:15
One of the common needs of a contribution or event registration system is to track what campaign that transaction is destined from and what link originated the transaction. This allows organizations to calculate what links / web sites / advertising / mailings are most effective and use that information to influence their current or future campaigns. Some organizations (e.g. wikimedia foundation) use a three level tracking scheme: Campaign, Appeal and Fund, while other organizations might choose to use only one tracking field.
This issue came up at the San Francisco developer camp. There is no built-in support for this in CiviContribute or CiviEvent. However we can accomplish something very similar using a combination of custom fields, populating fields via a GET url and a civicrm buildForm hook. We've made some changes to v2.2.4 to make it easier. Here is the recipe for tracking either a contribution or event registration page.
- Create a custom group called "Contribution Tracker" which extends Contribution. Within that group create three custom fields, one each for Campaign, Appeal and Fund. In my test setup i created these as searchable text fields with a length of 64 characters. Lets assume these custom fields have ids of 4, 5 and 6.
- Add these three fields to a Profile which is included on that contribution page. let assume the contribution page has an id of 1
- In a drupal module (lets call it civitracker) create the following hook
function civitracker_civicrm_buildForm( $formName, &$form ) { // enable tracking feature if ( ( $formName == 'CRM_Contribute_Form_Contribution_Main' || $formName == 'CRM_Contribute_Form_Contribution_Confirm' || $formName == 'CRM_Contribute_Form_Contribution_ThankYou' ) && $form->getVar( '_id' ) == 1 ) { // use CONTRIBUTION PAGE ID here // use the custom field ID and custom field label here $trackingFields = array( 'custom_4' => 'Campaign', 'custom_5' => 'Appeal', 'custom_6' => 'Fund' ); $form->assign( 'trackingFields', $trackingFields ); } }
- Make sure your civitracker module is enabled
Filed under
Comments
Hooks for CiviContribute = Great!
Another great hook would be to enable rolling contributions that call a custom function/url at the specified intervals as specified in the setup of the contribution.
We have developed a Joomla! component to integrate with the payment gateway of Westpac, one of the major Australian banks, which records a CiviCRM Contribution upon success. The donation is a recurring contribution for a specified monthly amount, so it would be great if you could set up CiviContribute with a recurring contribution that would call a specified function/url at the given time through a cron job (with a token for the contribution id and contributor id that the receiving function could then use to talk with Civi through the API).
Andrew
It basically records a new contribution and associates it with a recurring contribution based on information sent in by the payment processor
lobo
Will do.
To make it work for more than contribution page change:
$form->getVar( '_id' ) == 1 ) {
to
$form->getVar( '_id' ) >= 1 ) {