侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php广告加载类用法实例

php  /  管理员 发布于 7年前   194

本文实例讲述了php广告加载类的用法,非常实用。分享给大家供大家参考。具体方法如下:

该php广告加载类,支持异步与同步加载。需要使用Jquery实现。

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, ''); } } 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            

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>"); 

本文所述完整实例源码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

您可能感兴趣的文章:

  • PHP面向对象程序设计之命名空间与自动加载类详解
  • PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
  • PHP命名空间和自动加载类
  • php _autoload自动加载类与机制分析
  • php面向对象全攻略 (十七) 自动加载类
  • php使用simplexml_load_file加载XML文件并显示XML的方法
  • php ci框架中加载css和js文件失败的原因及解决方法
  • php ci框架中加载css和js文件失败的解决方法
  • php include加载文件两种方式效率比较
  • PHP框架自动加载类文件原理详解


  • 上一条:
    php过滤html标记属性类用法实例
    下一条:
    php实现根据url自动生成缩略图的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客