Drupal Commerce AdWords-module
In 2013/2014 is module uc_adword
geímplementeerd: Dynamische conversion-tracking voor Übercart 2/Drupal 6. Dit is geen 'complete' module en bevat zelfs geen grafische interface, maar hij doet precies waar-ie voor bedoeld is. De module is vrijgegeven onder de GPL V2.
Eind 2016 was er geen ontkomen meer aan: De module moest omgezet worden naar Drupal 7/Drupal Commerce 1.x, onder de naam commerce_adwords
.
uc_adwords: Hoe het werkt
De module declareert twee functies die dankzij de juiste hooks rondom de dankjewel-pagina hun ding doen. Je hoeft dus geen code in te voegen in blocks of pagina's. In de code kun parameter PRODUCTS_ONLY
gebruiken om te bepalen dat het orderbedrag in- of exclusief vervoerskosten overgenomen moet worden. Iets meer in detail:
uc_adwords_order()
detecteert nieuwe orders, en slaat de order-id op in een custom sessie-variableeuc_adwords_footer()
detecteert de dankjewel-pagina. Haalt de sessie-variabele op, roept de tag-functie aan, en output de tag naar de footeradd_adwords_js()
Genereer en retourneer AdWords-tag.
Welk bedrag precies?
Orderbedrag minus vrachtkosten minus BTW:
Drupal Commerce: Nieuwe order - Welk event?
- Een nieuwe order is een feit op het moment dat de order-email wordt verstuurd. Dat is waarschijnlijk het moment van checkout_completion, niet het moment waarop een order definitief is, want soms moet er nog betaald worden (bv. bij bankoverschrijving)
- Alternatief event: URL detecteren.
Dit is de export-code van het checkout_completetion_email_send-event:
{ "commerce_checkout_order_email" : { "LABEL" : "Send an order notification e-mail", "PLUGIN" : "reaction rule", "WEIGHT" : "4", "OWNER" : "rules", "TAGS" : [ "Commerce Checkout" ], "REQUIRES" : [ "rules", "commerce_checkout" ], "ON" : { "commerce_checkout_complete" : [] }, "DO" : [ { "mail" : { "to" : [ "commerce-order:mail" ], "subject" : "Order [commerce-order:order-number] at [site:name]", "message" : "Thanks for your order [commerce-order:order-number] at [site:name].\n\nIf this is your first order with us, you will receive a separate e-mail with login instructions. You can view your order history with us at any time by logging into our website at:\n\n[site:login-url]\n\nYou can find the status of your current order at:\n\n[commerce-order:customer-url]\n\nPlease contact us if you have any questions about your order.", "from" : "" } }, { "mail" : { "to" : "info@example.com" "subject" : "Nieuwe order [commerce-order:order-number]", "message" : "Klant: [commerce-order:owner] - [commerce-order:mail]\r\nGeplaatst: [commerce-order:created]\r\nOrderregels: [commerce-order:commerce-line-items]\r\nBetaalmethode: [commerce-order:payment-method] - [commerce-order:payment-method-title]\r\nTotaalbedrag: [commerce-order:commerce_order_total]\r\nLink: [commerce-order:admin-url]\r\n", "language" : [ "commerce-order:state" ] } } ] } }
Appendix: Broncode uc_adwords
uc_adwords.info
name = uc_adwords description = Implements dynamic conversion tracking for adwords in ubercart version = 6.x-0.1 core = 6.x package = Custom files[] = uc_adwords.module
uc_adwords.install
Er is geen installatie-procedure:
<?php
uc_adwords.module - 2014
Dit is vermoedelijk niet meer de originele code, maar een licht gewijzigde variant:
<?php define('PRODUCTS_ONLY', FALSE); // If set to TRUE google_conversion_value will be products only (without shipping costs) function uc_adwords_footer () { // Check to see if we are at the order completion page. if (arg(0) == 'cart' && arg(1) == 'checkout' && arg(2) == 'complete') { // If we can load the order... if ($order = uc_order_load($_SESSION['uc_adwords_order_id'])) { $output = add_adwords_js($order); } // Clean out the session variable. unset($_SESSION['uc_adwords_order_id']); } return $output; } /** * Implementation of hook_order(). */ function uc_adwords_order($op, &$arg1, $arg2) { switch ($op) { case 'new': // Store the order ID for later use. $_SESSION['uc_adwords_order_id'] = $arg1->order_id; break; } } function add_adwords_js ($order) { //global $_google_adwords_footer_script; $script = ''; // google adwords paramters $google_conversion_id = 986212345; $google_conversion_language = "en"; $google_conversion_format = "2"; $google_conversion_color = "ffffff"; $google_conversion_label = "FM3zCM-12345qc2m1gM"; $google_remarketing_only = false; // conversion value // ================ // // Value PRODUCTS_ONLY (boolean) // // true : Only value of products incorporated, ex. transportation cost // false: Complete order amount incorporated // $PRODUCTS_ONLY = True; if (PRODUCTS_ONLY) $google_conversion_value = uc_order_get_total($order, TRUE); else { $google_conversion_value = $order->order_total; } $google_conversion_value = uc_currency_format($google_conversion_value, FALSE, TRUE, '.'); // google adwords script $script = ''; $script .= "\n" . '<!-- Google Code for Order Complete scherm Conversion Page -->' . "\n"; $script .= '<script type="text/javascript">' . "\n"; //$script .= '<!--' . "\n"; $script .= ' /* <![CDATA[ */' . "\n"; $script .= ' var google_conversion_id = '. $google_conversion_id .';' . "\n"; $script .= ' var google_conversion_language = "'. $google_conversion_language .'";' . "\n"; $script .= ' var google_conversion_format = "'. $google_conversion_format .'";' . "\n"; $script .= ' var google_conversion_color = "'. $google_conversion_color .'";' . "\n"; $script .= ' var google_conversion_label = "'. $google_conversion_label .'";' . "\n"; $script .= ' var google_conversion_value = "'. $google_conversion_value .'";' . "\n"; $script .= ' var google_remarketing_only = "'. $google_remarketing_only .'";' . "\n"; $script .= ' /* ]]> */ ' . "\n"; $script .= '</script>' . "\n"; $script .= '<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">' . "\n"; $script .= '</script>' . "\n"; $script .= '<noscript>' . "\n"; $script .= '<div style="display:inline;">' . "\n"; $script .= '<img height="1" width="1" border="0" src="https://www.googleadservices.com/pagead/conversion/' . $google_conversion_id . '?value='. $google_conversion_value .'&label='. $google_conversion_label .'&guid=ON&script=0" alt=""/>' . "\n"; $script .= '</div>' . "\n"; $script .= '</noscript>' . "\n"; return $script; }
uc_adwords.module - 2015
Wijzigingen:
- Google Tag Assistant suggereerde dat geldbedragen numerieke waardes dienen te zijn, en geen strings
- Voorzien van commentaar
<?php define('PRODUCTS_ONLY', FALSE); // If set to TRUE google_conversion_value will be products only (without shipping costs) ///////////////////////////////////////////////////////////////////////// // uc_adwords_footer() ///////////////////////////////////////////////////////////////////////// // // Output the AdWords Conversion-tag at the checkout completion page // // * The hook is 'footer' // * Additionally, check that we're on the checkout completion page // * Additionally, check that we can load the current order // * Call function add_adwords_js($order) // function uc_adwords_footer () { if (arg(0) == 'cart' && arg(1) == 'checkout' && arg(2) == 'complete') { // If we can load the order... if ($order = uc_order_load($_SESSION['uc_adwords_order_id'])) { $output = add_adwords_js($order); } // Clean out the session variable. unset($_SESSION['uc_adwords_order_id']); } return $output; } ///////////////////////////////// // uc_adwords_order() ///////////////////////////////// // // Intercept any new order and store in a session variable // // * Hook = "order": http://www.ubercart.nl/docs/api/hook_order // * $op: De action that is being performed // * $arg1: Order-object // * $arg2: Eventueel additioneel argument bij $arg1 function uc_adwords_order($op, &$arg1, $arg2) { switch ($op) { case 'new': // Store the order ID in a session variable for later use // $_SESSION['uc_adwords_order_id'] = $arg1->order_id; break; } } ///////////////////////////////// // add_adwords_js() ///////////////////////////////// // // Generate tag // function add_adwords_js ($order) { //global $_google_adwords_footer_script; $script = ''; // google adwords parameters // $google_conversion_id = 986212345; $google_conversion_language = "en"; $google_conversion_format = "2"; $google_conversion_color = "ffffff"; $google_conversion_label = "FM3zCM-12345qc2m1gM"; $google_remarketing_only = false; // conversion value // ================ // // Value PRODUCTS_ONLY (boolean) // // true : Only value of products incorporated, ex. transportation cost // false: Complete order amount incorporated // $PRODUCTS_ONLY = True; if (PRODUCTS_ONLY) $google_conversion_value = uc_order_get_total($order, TRUE); else { $google_conversion_value = $order->order_total; } $google_conversion_value = uc_currency_format($google_conversion_value, FALSE, TRUE, '.'); // Assemble Adwords tag // ==================== // $script = ''; $script .= "\n" . '<!-- Google Code for Order Complete scherm Conversion Page -->' . "\n"; $script .= '<script type="text/javascript">' . "\n"; //$script .= '<!--' . "\n"; $script .= ' /* <![CDATA[ */' . "\n"; $script .= ' var google_conversion_id = '. $google_conversion_id .';' . "\n"; $script .= ' var google_conversion_language = "'. $google_conversion_language .'";' . "\n"; $script .= ' var google_conversion_format = "'. $google_conversion_format .'";' . "\n"; $script .= ' var google_conversion_color = "'. $google_conversion_color .'";' . "\n"; $script .= ' var google_conversion_label = "'. $google_conversion_label .'";' . "\n"; $script .= ' var google_conversion_value = '. $google_conversion_value .';' . "\n"; $script .= ' var google_remarketing_only = "'. $google_remarketing_only .'";' . "\n"; $script .= ' /* ]]> */ ' . "\n"; $script .= '</script>' . "\n"; $script .= '<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">' . "\n"; $script .= '</script>' . "\n"; $script .= '<noscript>' . "\n"; $script .= '<div style="display:inline;">' . "\n"; $script .= '<img height="1" width="1" border="0" src="https://www.googleadservices.com/pagead/conversion/' . $google_conversion_id . '?value='. $google_conversion_value .'&label='. $google_conversion_label .'&guid=ON&script=0" alt=""/>' . "\n"; $script .= '</div>' . "\n"; $script .= '</noscript>' . "\n"; return $script; }