You are here

gpt_async.inc in DFP Small Business (Google Ad Manager) 6.3

File

plugins/ad_providers/gpt_async.inc
View source
<?php

/**
 * @file
 * Implementation of the Google Publisher Tags (Async).
 */
$plugin = array(
  'title' => t('Google Publisher Tags (Async)'),
  'defaults' => array(
    'account' => '',
  ),
  'admin form' => 'google_admanager_gpt_async_admin_form',
  'init' => 'google_admanager_gpt_async_init',
  'display ad' => 'google_admanager_gpt_async_display_ad',
);
function google_admanager_gpt_async_admin_form(&$form_state, $conf) {
  $form = array();
  $form['account'] = array(
    '#type' => 'textfield',
    '#title' => t('DFP Network Code'),
    '#default_value' => $conf['account'],
    '#size' => 30,
    '#maxlength' => 40,
  );
  return $form;
}
function google_admanager_gpt_async_init($conf) {
  $script = <<<EOL
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function() {
  var gads = document.createElement('script');
  gads.async = true;
  gads.type = 'text/javascript';
  var useSSL = 'https:' == document.location.protocol;
  gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
  var node =document.getElementsByTagName('script')[0];
  node.parentNode.insertBefore(gads, node);
})();
EOL;
  google_admanager_add_js($script, 'init');
  $script = <<<EOF
  googletag.pubads().enableSingleRequest();
  googletag.enableServices();
});
EOF;
  google_admanager_add_js('googletag.cmd.push(function() {', 'slot');
  google_admanager_add_js($script, 'slot');
}
function google_admanager_gpt_async_targetting() {
  static $targetting;
  if (!isset($targetting)) {

    // Build variables to add to each zone
    $targetting = array();
    foreach (google_admanager_get_variables() as $key => $value) {
      $targetting[] = "    .setTargeting('" . check_plain($key) . "', '" . check_plain($value) . "')";
    }
    $targetting = !empty($targetting) ? "\n" . implode("\n", $targetting) : '';
  }
  return $targetting;
}
function google_admanager_gpt_async_display_ad($ad_slot, $conf) {
  $script = "  googletag.defineSlot('/{$conf['account']}/{$ad_slot['name']}', [{$ad_slot['width']}, {$ad_slot['height']}], 'gam-holder-{$ad_slot['name']}').addService(googletag.pubads())" . google_admanager_gpt_async_targetting() . ';';
  google_admanager_add_js($script, 'slot', -1);
  $script = "googletag.cmd.push(function() {googletag.display('gam-holder-{$ad_slot['name']}');});";
  $style = 'width:' . $ad_slot['width'] . 'px;height:' . $ad_slot['height'] . 'px;';
  return '<div id="gam-holder-' . $ad_slot['name'] . '" class="gam-holder" style="' . $style . '"><script type="text/javascript">' . $script . '</script></div>';
}