loading

Stanislav Duben

Stanislav Duben ICQ: 66800432 email: duben@seznam.cz Skype: sduben

1. září 2012

Responsivní reklama v OpenX - technické řešení

responsivni-reklamaJak jsem v předchozím článku o responsivní reklamě zmínil, další část se bude zabývat konkrétním technickým řešením. V tomto článku konkrétně řešení pro OpenX, které používám.

Responsivní reklama pro OpenX

Správce reklamních ploch v OpenX umožňuje generovat zobrazovací kód na 3 varianty. Javascript Tag, iFrame Tag a Local Mode Tag. Použitelná je právě a pouze první varianta. iFrame nelze použít mimo jiné i kvůli upraveným pravidlům Adsense, které nepovolují zobrazovat reklamu v iframech. Local mód vkládá reklamu na základě PHP, což je řešení které neumí rozpoznat rozlišení obrazovky.

Analýza zobrazovacího kódu OpenX

Javascriptem vygenerovaný kód vypadá takto

<!--/* OpenX Javascript Tag v2.8.7 */-->
<script type='text/javascript'><!--//<![CDATA[
document.MAX_ct0 ='INSERT_CLICKURL_HERE';

var m3_u = (location.protocol=='https:'?'https://ad.iluze.com/www/delivery/ajs.php':'http://ad.iluze.com/www/delivery/ajs.php');
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=20");
document.write ('&amp;cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
document.write ("&amp;loc=" + escape(window.location));
if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
if (document.context) document.write ("&context=" + escape(document.context));
if ((typeof(document.MAX_ct0) != 'undefined') && (document.MAX_ct0.substring(0,4) == 'http')) {
document.write ("&amp;ct0=" + escape(document.MAX_ct0));
}
if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
document.write ("'><\/scr"+"ipt>");
//]]>--></script><noscript><a href='http://ad.iluze.com/www/delivery/ck.php?n=aa241909&amp;cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://ad.iluze.com/www/delivery/avw.php?zoneid=20&amp;cb=INSERT_RANDOM_NUMBER_HERE&amp;n=aa241909&amp;ct0=INSERT_CLICKURL_HERE' border='0' alt='' /></a></noscript>

Část kódu "http://ad.iluze.com" odkazuje na můj reklamní server, u vás bude jinak. Podstatné z hlediska určení reklamní plochy je zoneid a v části noscript je to pak parametr n, tyto parametry mají v každém kódu jiné hodnoty. Na ty se ty při úpravách budeme muset zaměřit.

Detekce rozlišení v hlavičce stránek

Pro detekci aktuálního rozlišení prohlížeče a nastavení parametrů použivám mezi tagy <head></head> v html následující kód.

<script type="text/javascript">
  var screenwidth;
  var TopReklamaZoneID;
  var SideReklamaZoneID;
  var Side2ReklamaZoneID;
  /* ZoneID
  760x100 = 111
  468x60  = 138
  320x50  = 139

  160x600 = 110
  empty   = 140
  250x250 = 125
  */

  screenwidth = document.documentElement.clientWidth;
  if (screenwidth < 480) {
    TopReklamaZoneID = 139;
    SideReklamaZoneID = 140;
    Side2ReklamaZoneID = 140;      
  } else if ((screenwidth > 479) && (screenwidth < 768) ) {
    TopReklamaZoneID = 138;
    SideReklamaZoneID = 140;      
    Side2ReklamaZoneID = 140;      
  } else if ((screenwidth > 767) && (screenwidth < 959) ) {
    TopReklamaZoneID = 111;
    SideReklamaZoneID = 110;      
    Side2ReklamaZoneID = 140;      
  } else {
    TopReklamaZoneID = 111;
    SideReklamaZoneID = 125;      
    Side2ReklamaZoneID = 125;      
  }
</script>

Krátké vysvětlení, na stránkách nh6.cz používám 3 různé velikosti top banneru podle šířky rozlišení: 760x100, 468x60, 320x50. Pro postranní banner mám dvě reklamní pozice, kde zobrazují buď dvakrát 250x250, nebo jednou 160x600 a druhá pozice je prázdná, nebo postraní panel není vidět a obě pozice jsou prázné. Zeleně je v komentáři napsáno které zoneID odpovídá které reklamní ploše a potom pouze pomocí document.documentElement.clientWidth detekuji rozlišení a podle výsledku nastavím hodnoty pro konkrétní zóny.

Úprava javascript části OpenX kódu

V javascriptové části OpenX kód pak nastavím vhodnou proměnou místo původní napevno zadané hodnoty, tedy například místo

document.write ("?zoneid=111");

použiji

document.write ("?zoneid="+TopReklamaZoneID);

podobně pak pro další dvě plochy v postranním panelu

document.write ("?zoneid="+SideReklamaZoneID);
document.write ("?zoneid="+Side2ReklamaZoneID);

Tím mám zajištěno, že načítám odpovídající reklamní rozměr a zpracovává se část kódu pro javascript.

Co s noscript částí

V části s javascriptem není problém změnit hodnotu zoneid s pevně daného čísla na proměnou. Ale co s kódem mezi <noscript>? Tam se při vytváření stránky podsunout hodnota nedá a šla by až zpětně po načtení stránky. Zde stačí drobná úvaha, noscript se používá v případě že dané zařízení neumí javascript, nebo ho má zakázáno použít. V tu chvíli nebude fungovat ani detekce rozlišení pomocí javascriptu, ani AJAX, který je taky javascriptový. V principu tedy nemá moc smysl se touto částí zabývat, ale je dobré dát sem kód s nejmenší reklamní plochou pro daný web, případně "empty" plochu, tedy takovou co nemá přiřazenou žádnou kampaň a banner k zobrazení.

V mém případě je to tedy uděláno tak, že dolní část <noscript> má natvrdo vložené kódu 320x50 pro horní banner a empty pro pro postranní pozice.

Tím mám OpenX ve webu nastavený a můžete si vyzkoušet jak to při načtení v různých velikostech prohlížeče funguje.