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 - hook_commerce_checkout_complete
- 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.
De eerste regels van de code-export van het checkout_completetion_email_send-event. Deze lijkt hook commerce_checkout_complete
te suggereren:
{ "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" : [] }, ...
Lang verhaal kort: Dit werkt niet. Zie de bronnen voor details.
Event-debugging
Gebruik drush fn-hook
om een overzicht te krijgen van geregistreerde hooks. Bv.:
drush fn-hook commerce_checkout_complete Enter the number of the hook implementation you wish to view. [0] : Cancel [1] : commerce_adwords [2] : commerce_cart 1 // file: /var/www/kbo215.dvb/sites/all/modules/commerce_adwords/commerce_adwords.module, lines 7-10 function commerce_adwords_commerce_checkout_complete($order) { print phpinfo(); }
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; }
Bronnen
hook_commerce_checkout_complete
- https://www.drupal.org/node/2108801 - Calling hook_commerce_checkout_complete from paypal_wps? » Verhelderend!
- https://www.drupal.org/node/1460964 - "When completing the checkout process" never fires if a rule sets order complete on IPN » Verhelderend
- https://drupalcommerce.org/node/1150 - RESOLVED - Completing the checkout process not firing