We-charge paresseux Code de OpenX. Au lieu de placer l'appel d'une seule page en haut de la page, nous le mettons en bas. Une fois la page chargée, l'appel reçoit les données de la bannière et un code personnalisé ajoute les bonnes bannières dans les zones correctes.
Le code ci-dessous nécessite un DOM approprié. Si vous avez jQuery, DOMAssistant, FlowJS, etc, le DOM doit être réparé pour vous. Ce code fonctionnera avec les bannières normales avec des images, un contenu Flash ou HTML. Cela peut ne pas fonctionner dans certains cas, comme lorsque vous utilisez des bannières de fournisseurs externes (adform, etc). Pour cela, vous devrez peut-être pirater un peu le code.
Comment l'utiliser?
- ajoutez votre code SinglePageCall vers la fin de votre code HTML
- ajouter ce code sous le code de la CPS.
- après une demi-seconde environ, votre code OpenX devrait être prêt, et le code ci-dessous mettra les bannières dans les DIVs spécifiés.
- Oh, oui, vous devez ajouter à votre code HTML des DIVs comme des espaces pour vos bannières. Par défaut j'ai ces bannières définies avec la classe CSS "cachée" qui masque totalement les DIVs (avec visibilité, affichage et hauteur). Ensuite, après que la bannière dans un DIV donné soit chargée avec succès, nous retirons la classe cachée et la DIV (et la bannière à l'intérieur) devient visible.
Utilisez à vos risques et périls! :) Espérons que cela aide
(function(){
if (!document || !document.getElementById || !document.addEventListener || !document.removeClass) {
return; // No proper DOM; give up.
}
var openx_timeout = 1, // limit the time we wait for openx
oZones = new Object(), // list of [div_id] => zoneID
displayBannerAds; // function.
// oZones.<divID> = <zoneID>
// eg: oZones.banner_below_job2 = 100;
// (generated on the server side with PHP)
oZones.banner_top = 23;
oZones.banner_bottom = 34;
displayBannerAds = function(){
if(typeof(OA_output)!='undefined' && OA_output.constructor == Array){
// OpenX SinglePageCall ready!
if (OA_output.length>0) {
for (var zone_div_id in oZones){
zoneid = oZones[zone_div_id];
if(typeof(OA_output[zoneid])!='undefined' && OA_output[zoneid]!='') {
var flashCode,
oDIV = document.getElementById(zone_div_id);
if (oDIV) {
// if it's a flash banner..
if(OA_output[zoneid].indexOf("ox_swf.write")!=-1)
{
// extract javascript code
var pre_code_wrap = "<script type='text/javascript'><!--// <![CDATA[",
post_code_wrap = "// ]]> -->";
flashCode = OA_output[zoneid].substr(OA_output[zoneid].indexOf(pre_code_wrap)+pre_code_wrap.length);
flashCode = flashCode.substr(0, flashCode.indexOf(post_code_wrap));
// replace destination for the SWFObject
flashCode = flashCode.replace(/ox\_swf\.write\(\'(.*)'\)/, "ox_swf.write('"+ oDIV.id +"')");
// insert SWFObject
if(flashCode.indexOf("ox_swf.write")!=-1){
eval(flashCode);
oDIV.removeClass('hidden');
}// else: the code was not as expected; don't show it
}else{
// normal image banner; just set the contents of the DIV
oDIV.innerHTML = OA_output[zoneid];
oDIV.removeClass('hidden');
}
}
}
} // end of loop
}//else: no banners on this page
}else{
// not ready, let's wait a bit
if (openx_timeout>80) {
return; // we waited too long; abort
};
setTimeout(displayBannerAds, 10*openx_timeout);
openx_timeout+=4;
}
};
displayBannerAds();
})();
voir http://stackoverflow.com/questions/3106782/openx-aysnc-tags –