php中如何使用广告加载类
创始人
2024-12-13 07:20:51
0次

ADLoader.class.php类文件如下:

0){ 
      self::$_step = $step; 
    } 
 
    if(isset($async) && is_bool($async)){ 
      self::$_async = $async; 
    } 
 
    // 判断浏览器,如IE强制使用同步加载 
    if(!self::checkBrowser()){ 
      self::$_async = false; 
    } 
 
    self::getAds($channel); 
    self::genZoneId(); 
 
    return self::genHtml(); 
  } 
 
  /** 设置config 
  * @param String $config 广告配置 
  * @param String $jsclass js class文件路径 
  */ 
  public static function setConfig($config=array(), $jsclass=''){ 
    self::$_config = $config; 
    self::$_jsclass = $jsclass; 
  } 
 
 
  /** 根据channel创建广告集合 
  * @param String $channel 栏目 
  */ 
  private static function getAds($channel=''){ 
    $AD_Config = self::$_config; 
    if($AD_Config!=null){ 
      self::$_ads = isset($AD_Config[$channel])? $AD_Config[$channel] : $AD_Config['default']; 
    } 
  } 
 
  /** zoneid base64_encode 处理 */ 
  private static function genZoneId(){ 
 
    // 同步加载广告不需要处理zoneid 
    if(!self::$_async){ 
      return ; 
    } 
 
    $ads = self::$_ads; 
    for($i=0,$len=count($ads); $i<$len; $i++){ 
      if(isset($ads[$i]['zoneId'])){ 
        $ads[$i]['zoneId'] = base64_encode('var zoneid='.$ads[$i]['zoneId'].';'); 
      } 
    } 
    self::$_ads = $ads; 
  } 
 
  /** 生成广告html */ 
  private static function genHtml(){ 
    $ads = self::$_ads; 
    $html = array(); 
    if(self::$_jsclass!=null && $ads){ 
      array_push($html, ''); 
 
      // 同步需要预先加载 
      if(!self::$_async){ 
        foreach($ads as $ad){ 
          array_push($html, ''); 
          array_push($html, ''); 
          array_push($html, 'ADLoader.preload('.json_encode($ad).');'); 
          array_push($html, ''); 
          array_push($html, '
');          }        }          array_push($html, '');        array_push($html, 'var ads='.json_encode($ads).';');        array_push($html, '$(document).ready(function(){ ADLoader.load(ads, '.self::$_step.', '.intval(self::$_async).'); });');        array_push($html, '');      }      return implode("\r\n", $html);    }      /** 判断是否需要强制同步加载的浏览器 */    private static function checkBrowser(){      $user_agent = $_SERVER['HTTP_USER_AGENT'];      if(strstr($user_agent,'MSIE')!=''){        return false;      }      return true;    }    } // class end  ?>

ADConfig.php文件如下:

 array( 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_728x90', 
      'zoneId' => 452 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_300x250', 
      'zoneId' => 449 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_l2_300x250', 
      'zoneId' => 394 
    ), 
  ), 
 
  'case_url' => array( 
    array( 
      'type' => 'url', 
      'domId' => 'ad_728x90', 
      'url' => 'adurl.php?zoneid=452' 
    ), 
    array( 
      'type' => 'url', 
      'domId' => 'ad_300x250', 
      'url' => 'adurl.php?zoneid=449' 
    ), 
    array( 
      'type' => 'url', 
      'domId' => 'ad_l2_300x250', 
      'url' => 'adurl.php?zoneid=394' 
    ) 
  ), 
 
  'case_sync_openx' => array( 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_728x90', 
      'zoneId' => 452 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_300x250', 
      'zoneId' => 449 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_l2_300x250', 
      'zoneId' => 394 
    ), 
  ), 
 
  'default' => array( 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_728x90', 
      'zoneId' => 452 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_300x250', 
      'zoneId' => 449 
    ), 
    array( 
      'type' => 'openx', 
      'domId' => 'ad_l2_300x250', 
      'zoneId' => 394 
    ), 
  ), 
 
); 
 
?>

ADLoader.js文件如下:

/** 异步加载广告 
*  Date:  2013-08-04 
*  Author: fdipzone 
*  Ver:  1.0 
*/ 
var ADLoader = (function(){ 
 
  var _ads = [],   // 广告集合 
    _step = 300,  // 广告加载间隔 
    _async = true, // 是否异步加载 
    _loaded = 0;  // 已经加载的广告数 
   
  /** loadAd 循环加载广告 
  * @param int c 第几个广告 
  */ 
  function loadAD(c){ 
    if(_loaded>=_ads.length){ 
      return ; 
    } 
 
    if($('#'+_ads[c].domId).length>0){ // 判断dom是否存在 
 
      if(_async){ // 异步执行 
 
        crapLoader.loadScript(getScript(_ads[c]), _ads[c].domId, { 
          success: function(){ 
            completeAd(); 
          } 
        }); 
       
      }else{ // 将同步加载的广告显示 
 
        var ad_container = $('#'+_ads[c].domId+'_container'); 
        ad_container.find('embed').attr('wmode','transparent').end().find('object').each(function(k, v){ 
          v.wmode = 'transparent'; // 将flash变透明 
        }); 
        $('#'+_ads[c].domId)[0].appendChild(ad_container[0]); 
        ad_container.show(); 
         
        completeAd(); 
      } 
    }else{ // dom不存在 
      completeAd(); 
    } 
  } 
 
  /** 加载完广告后处理 */ 
  function completeAd(){ 
    _loaded ++; 
    setTimeout(function(){ 
      loadAD(_loaded); 
    }, _step);     
  } 
 
  /** 获取广告 
  * @param Array ad 广告参数 
  */ 
  function getScript(ad){ 
    var ret = null; 
 
    switch(ad.type){ 
      case 'openx': // openx code ad 
        ret = 'data:text/javascript;base64,' + ad.zoneId + 'dmFyIG0zX3UgPSAobG9jYXRpb24ucHJvdG9jb2w9PSdodHRwczonPydodHRwczovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJzonaHR0cDovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJyk7CnZhciBtM19yID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OTk5KTsKaWYgKCFkb2N1bWVudC5NQVhfdXNlZCkgZG9jdW1lbnQuTUFYX3VzZWQgPSAnLCc7CmRvY3VtZW50LndyaXRlICgiPHNjciIrImlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIittM191KTsKZG9jdW1lbnQud3JpdGUgKCI/em9uZWlkPSIgKyB6b25laWQpOwpkb2N1bWVudC53cml0ZSAoJyZhbXA7Y2I9JyArIG0zX3IpOwppZiAoZG9jdW1lbnQuTUFYX3VzZWQgIT0gJywnKSBkb2N1bWVudC53cml0ZSAoIiZhbXA7ZXhjbHVkZT0iICsgZG9jdW1lbnQuTUFYX3VzZWQpOwpkb2N1bWVudC53cml0ZSAoZG9jdW1lbnQuY2hhcnNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyc2V0IDogKGRvY3VtZW50LmNoYXJhY3RlclNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyYWN0ZXJTZXQgOiAnJykpOwpkb2N1bWVudC53cml0ZSAoIiZhbXA7bG9jPSIgKyBlc2NhcGUod2luZG93LmxvY2F0aW9uKSk7CmlmIChkb2N1bWVudC5yZWZlcnJlcikgZG9jdW1lbnQud3JpdGUgKCImYW1wO3JlZmVyZXI9IiArIGVzY2FwZShkb2N1bWVudC5yZWZlcnJlcikpOwppZiAoZG9jdW1lbnQuY29udGV4dCkgZG9jdW1lbnQud3JpdGUgKCImY29udGV4dD0iICsgZXNjYXBlKGRvY3VtZW50LmNvbnRleHQpKTsKaWYgKGRvY3VtZW50Lm1tbV9mbykgZG9jdW1lbnQud3JpdGUgKCImYW1wO21tbV9mbz0xIik7CmRvY3VtZW50LndyaXRlICgiJz48XC9zY3IiKyJpcHQ+Iik7'; 
        break; 
       
      case 'url': // url ad 
        ret = ad.url; 
        break; 
    } 
    return ret; 
  } 
 
  /** 同步加载广告 
  * @param Array ad 广告参数 
  */ 
  function writeAd(ad){ 
    switch(ad.type){ 
      case 'openx': 
        var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php'); 
        var m3_r = Math.floor(Math.random()*99999999999); 
        if (!document.MAX_used) document.MAX_used = ','; 
        document.write ("<\/scr"+"ipt>"); 
        break; 
       case 'url': 
        document.write (''); 
        break; 
    } 
  } 
 
  obj = { 
 
    /** 加载广告 
    * @param Array  ads  广告集合 
    * @param int   step 广告加载间隔 
    * @param boolean async true:异步加载 false:同步加载 
    */ 
    load: function(ads, step, async){ 
      _ads = ads; 
 
      if(typeof(step)!='undefined'){ 
        _step = step; 
      } 
 
      if(typeof(async)!='undefined'){ 
        _async = async; 
      } 
 
      loadAD(_loaded); 
    }, 
 
    /** 预加载广告 */ 
    preload: function(ad){ 
      if($('#'+ad.domId).length>0){  // 判断dom是否存在 
        writeAd(ad); 
      } 
    } 
  } 
  return obj; 
 
}()); 
 
/* crapLoader */ 
var crapLoader = (function() { 
   
  var isHijacked = false, 
    queue = [], 
    inputBuffer = [], 
    writeBuffer = {}, 
    loading = 0, 
    elementCache = {}, 
    returnedElements = [], 
    splitScriptsRegex = /()/gim, 
    globalOptions = { 
      autoRelease: true, 
      parallel: true, 
      debug: false 
    }, 
    defaultOptions = { 
      charset: undefined, 
      success: undefined, 
      func: undefined, 
      src: undefined, 
      timeout: 3000 
    },publ, 
    head = document.getElementsByTagName("head")[0] || document.documentElement, 
    support = { 
      scriptOnloadTriggeredAccurately: false, 
      splitWithCapturingParentheses: ("abc".split(/(b)/)[1]==="b") 
    }; 
   
  function checkQueue () { 
    if(queue.length) { 
      loadScript( queue.shift() ); 
    } else if(loading === 0 && globalOptions.autoRelease) { 
      debug("Queue is empty. Auto-releasing."); 
      publ.release(); 
    } 
  } 
 
  function checkWriteBuffer (obj) { 
    var buffer = writeBuffer[obj.domId], 
      returnedEl; 
 
    if(buffer && buffer.length) { 
      writeHtml( buffer.shift(), obj ); 
 
    } else { 
      while (returnedElements.length > 0) { 
        returnedEl = returnedElements.pop(); 
        var id = returnedEl.id; 
        var elInDoc = getElementById(id); 
        if (!elInDoc) { continue; } 
        var parent = elInDoc.parentNode; 
        elInDoc.id = id + "__tmp"; 
        parent.insertBefore(returnedEl, elInDoc); 
        parent.removeChild(elInDoc); 
      } 
      finished(obj); 
    } 
  } 
 
  function debug (message, obj) { 
    if(!globalOptions.debug || !window.console) { return; } 
    var objExtra = ""; 
    if(obj) { 
      objExtra = "#"+obj.domId+" "; 
      var depth = obj.depth; 
      while(depth--) { objExtra += "  "; } 
    } 
    console.log("crapLoader " + objExtra + message); 
  } 
 
  function extend (t, s) { 
    var k; 
    if(!s) { return t; } 
    for(k in s) { 
      t[k] = s[k]; 
    } 
    return t; 
  } 
 
  function finished (obj) { 
    if(obj.success && typeof obj.success === "function") { 
      obj.success.call( document.getElementById(obj.domId) ); 
    } 
    checkQueue(); 
  } 
 
  function flush (obj) { 
    var domId = obj.domId, 
      outputFromScript, 
      htmlPartArray; 
 
    outputFromScript = stripNoScript( inputBuffer.join("") ); 
    inputBuffer = []; 
 
    htmlPartArray = separateScriptsFromHtml( outputFromScript ); 
 
    if(!writeBuffer[domId]) { 
      writeBuffer[domId] = htmlPartArray; 
    } else { 
      Array.prototype.unshift.apply(writeBuffer[domId], htmlPartArray); 
    } 
    checkWriteBuffer(obj); 
  } 
 
  function getCachedElById (domId) { 
    return elementCache[domId] || (elementCache[domId] = document.getElementById(domId)); 
  } 
 
  function getElementById (domId) { 
    return ( publ.orgGetElementById.call ? 
      publ.orgGetElementById.call(document, domId) : 
      publ.orgGetElementById(domId) ); 
  } 
 
  function getElementByIdReplacement (domId) { 
    var el = getElementById(domId), 
      html, frag, div, found; 
 
    function traverseForElById(domId, el) { 
      var children = el.children, i, l, child; 
      if(children && children.length) { 
        for(i=0,l=children.length; i prevIndex) { 
          result.push(str.slice(prevIndex, match.index)); 
        } 
 
        if(match.length > 1 && match.index < str.length) { 
          Array.prototype.push.apply(tmp, match.slice(1)); 
        } 
 
        prevIndex = regexp.lastIndex; 
      } 
 
      if(prevIndex < str.length) { 
        tmp.push(str.slice(prevIndex)); 
      } 
 
    } 
 
    for(i=0, l=tmp.length; i[\s\S]*?<\/noscript>/ig, ""); 
  } 
 
  function trim (str) { 
    if(!str) { return str; } 
    return str.replace(/^\s*|\s*$/gi, ""); 
  } 
 
  function writeHtml (html, obj) { 
    if( isScript(html) ) { 
      var dummy = document.createElement("div"); 
      dummy.innerHTML = "dummy
" + html + "
"; // trick for IE        var script = dummy.children[0].children[0];        var lang = script.getAttribute("language") || "javascript";        if(script.src) {          obj.src = script.src;          obj.charset = script.charset;          obj.language = lang;          obj.type = script.type;          loadScript(obj);        } else {          var code = trim( script.text );          if(code) {            logScript( obj, code, lang);            globalEval( code, lang);          }          flush(obj);        }      } else {        var container = getCachedElById(obj.domId);        if(!container) {          throw new Error("crapLoader: Unable to inject html. Element with id '" + obj.domId + "' does not exist");        }                html = trim(html); // newline before  cause weird effects in IE        if(html) {          container.innerHTML += html;        }        checkWriteBuffer(obj);      }    }      function writeReplacement (str) {      inputBuffer.push(str);      debug("write: " + str);    }      function openReplacement () {      // document.open() just returns the document when called from a blocking script:      // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open      return document;    }      function closeReplacement () {      // document.close() does nothing when called from a blocking script:      // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close    }      publ = {      hijack: function(options) {        if(isHijacked) { return; }        isHijacked = true;        extend(globalOptions, options);        if(globalOptions.parallel && !support.scriptOnloadTriggeredAccurately) {          globalOptions.parallel = false;          debug("Browsers onload is not reliable. Disabling parallel loading.");        }          document.write = document.writeln = writeReplacement;        document.open = openReplacement;        document.close = closeReplacement;        document.getElementById = getElementByIdReplacement;      },        release: function() {        if(!isHijacked) { return; }        isHijacked = false;        document.write = this.orgWrite;        document.writeln = this.orgWriteLn;        document.open = this.orgOpen;        document.close = this.orgClose;        document.getElementById = this.orgGetElementById;        elementCache = {};      },        handle: function(options) {        if(!isHijacked) {          debug("Not in hijacked mode. Auto-hijacking.");          this.hijack();        }        var defaultOptsCopy = extend({}, defaultOptions);        var obj = extend(defaultOptsCopy, options);        obj.depth = 0;          if (!obj.domId) {          obj.domId = "craploader_" + new Date().getTime();          var span = document.createElement("span");          span.id = obj.domId;          document.body.appendChild(span);        }          if (options.func) {          runFunc(obj);          return;        }          if(globalOptions.parallel) {          setTimeout(function() {            loadScript(obj);          }, 1);        } else {          queue.push(obj);          setTimeout(function() {            if(loading === 0) {              checkQueue();            }          }, 1);        }      },        loadScript: function(src, domId, options) {        if (typeof domId !== "string") {          options = domId;          domId = undefined;        }        this.handle(extend({          src:  src,          domId: domId        }, options));      },        runFunc: function(func, domId, options) {        if (typeof domId !== "string") {          options = domId;          domId = undefined;        }        this.handle( extend({          domId: domId,          func:   func        }, options) );      },        orgGetElementById  : document.getElementById,      orgWrite      : document.write,      orgWriteLn     : document.writeln,      orgOpen       : document.open,      orgClose      : document.close,      _olt        : 1,      _oltCallback    : function() {        support.scriptOnloadTriggeredAccurately = (publ._olt===2);      }    };      return publ;  }());

demo.php示例程序如下:

 
 
  
  
  AD Loader  
  
 .banner1{margin:10px; border:1px solid #CCCCCC; width:728px; height:90px;} 
 .banner2{margin:10px; border:1px solid #CCCCCC; width:300px; height:250px;} 
  
  
  
 
  
  
  
  
   
  
 
  

adurl.php文件如下:

 
var zoneid = ; 
var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php'); 
var m3_r = Math.floor(Math.random()*99999999999); 
if (!document.MAX_used) document.MAX_used = ','; 
document.write ("<\/scr"+"ipt>"); 

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...