·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

discuz X3.2 自定义系统广告详解

213 0
发表于 2022-3-4 14:38:06 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
dz自身是支持自定义广告位的归属于自定义类别,在广告位图标上不能够醒目的显示而且一些必要的后台交互也不好实现,所以找葫芦画瓢做个系统广告。

一、在source/class/adv中添加自定义的广告类文件adv_protaldropdown.php,格式为[adv_广告名]。

二、在source/language/adv中添加自定义的广告语言文件lang_protaldropdown.php,格式为[lang_广告名]。

三、在static/image/admincp中添加图标portaldropdown.gif,格式为[广告名.gif]

四、在template模板中放置广告展示位钩子

  实例:<!--{ad/portaldropdown/gg_full wrapfix}-->

  参数:钩子类别/广告名/广告所处div的class/队列广告排序位

lang_protaldropdown.php

[PHP]  
  1. <?php
  2. /**
  3. *      [Discuz!] (C)2001-2099 Comsenz Inc.
  4. *      This is NOT a freeware, use is subject to license terms
  5. *
  6. *      $Id: lang_portaldropdown.php 27449 2012-02-01 05:32:35Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9.         exit('Access Denied');
  10. }
  11. $lang = array
  12. (
  13.         'portaldropdown_name' => '首页下拉广告',
  14.         'portaldropdown_desc' => '展现方式: 广告以长方形图片的形式显示于导航下方,展示规定时间后自动缩回,通常使用宽小高大的长方形图片或 Flash 的形式。对联广告一般只在使用像素约定主表格宽度的情况下使用,如使用超过 90% 以上的百分比约定主表格宽度时,可能会影响访问者的正常浏览。当访问者浏览器宽度小于 800 像素时,自动不显示此类广告。当前页面有多个对联广告时,系统会随机选取其中之一显示。<br />价值分析: 对联广告由于只展现于高分辨率(1024x768 或更高)屏幕的两侧,只占用页面的空白区域,因此不会招致访问者反感,能够良好的突出推广内容。但由于对分辨率和主表格宽度的特殊要求,使得广告的受众比例无法达到 100%。',
  15.         'portaldropdown_index' => '首页',        
  16.         'portaldropdown_replay'        => '是否允许重播',
  17.         'portaldropdown_replay_comment' => '开启此项,该广告可重复展现',
  18.         'portaldropdown_disableclose' => '关闭广告的链接',
  19.         'portaldropdown_disableclose_comment' => '如果广告代码中已内置关闭操作,可以关闭系统预置的关闭链接',
  20.         'portaldropdown_show' => '显示',
  21.         'portaldropdown_hidden' => '隐藏',
  22.         'portaldropdown_yes'=>'是',
  23.                 'portaldropdown_no'=>'否'
  24. );
  25. ?>
复制代码


adv_protaldropdown.php 

[PHP]  
  1. <?php
  2. /**
  3. */
  4. if(!defined('IN_DISCUZ')) {
  5.         exit('Access Denied');
  6. }
  7. class adv_portaldropdown {//注意格式
  8.         var $version = '1.1';//版本
  9.         var $name = 'portaldropdown_name';//名称——对应语音文件的变量
  10.         var $description = 'portaldropdown_desc';//描述说明--对应语言文件中的变量,图1所以
  11.         var $copyright = '<a href="http://www.xingame.net" target="_blank">Netho</a>';//版权
  12.         var $targets = array( 'portal');//广告投放范围
  13.         var $imagesizes = array('900x300');//默认图片广告大小
  14.         function getsetting() {//广告参数选项设置
  15.                 global $_G;
  16.                 $settings = array(
  17.                         'replay' => array(//是否重播
  18.                                 'title' => 'portaldropdown_replay',
  19.                                 'type' => 'mradio',
  20.                                 'value' => array(
  21.                                                 array(0, 'portaldropdown_yes'),
  22.                                                 array(1, 'portaldropdown_no'),
  23.                                 ),
  24.                                 'default' => 0,
  25.                         ),
  26.                 'disableclose' => array(//是否隐藏
  27.                             'title' => 'portaldropdown_disableclose',
  28.                             'type' => 'mradio',
  29.                             'value' => array(
  30.                                     array(0, 'portaldropdown_show'),
  31.                                             array(1, 'portaldropdown_hidden'),
  32.                                 ),
  33.                             'default' => 0,
  34.                         )
  35.                 );               
  36.                 return $settings;
  37.         }
  38.         function setsetting(&$advnew, &$parameters) {
  39.                 global $_G;
  40.                 if(is_array($advnew['targets'])) {
  41.                         $advnew['targets'] = implode("\t", $advnew['targets']);
  42.                 }
  43.                 $parameters['extra']['fullAdType']=$advnew['style']=='flash'?'flash':'jpg';
  44.         }
  45.         function evalcode($data) {//广告内容组装
  46.                 $fullAdType=$data['parameters']['extra']['fullAdType'];
  47.                 $adHTML=$data['code'];
  48.                 $isReplay=$data['parameters']['extra']['replay']?'true':'false';
  49.                 $create=$isReplay==='true'?'<div class="gg_fbtn" style="display: block;"><a style="" class="gg_freplay" title="重播" href="#"></a><a class="gg_fclose" title="关闭" href="#" style="display: none;"></a></div>':'';
  50.                 $create.='<div class="gg_fcon" style="display: none;text-align: center;"></div>';
  51.                 $create.='<script type="text/javascript">seajs.use("common", function(index){index.dropListAdv("'.$fullAdType.'",\\\''.$adHTML.'\\\','.$isReplay.');});</script>';
  52.                 return array(
  53.                                 'check' => '
  54.                         if($_G[\'basescript\'] != \'portal\' || CURMODULE != \'index\' ]))
  55.                         ) {
  56.                                 $checked = false;
  57.                         }',
  58.                                 'create' => '
  59.                         $temp=\''.$create.'\';                                
  60.                         $adcode = empty($parameter[\'disableclose\']) ? (empty($_G[\'cookie\'][\'adclose_\'.$coupleadid]) ? \'<br /><a href="javascript:;"style="z-index: 200 !important;" οnclick="setcookie(\\\'adclose_\'.$coupleadid.\'\\\', 1, 1);this.parentNode.style.display=\\\'none\\\'"><img src="\'.STATICURL.\'image/common/ad_close.gif" /></a>\'.$temp : \'\') : $temp;
  61.                         ',
  62.                 );
  63.         }
  64. }
  65. ?>
复制代码


模板钩子(局部代码)

[HTML]  
  1. <!--{template common/header}-->
  2. <!--[name]网站首页[/name]-->
  3. <script type="text/javascript">
  4.            seajs.use("portal_index", function(index){index.init();});
  5. </script>
  6. <div class="wp">
  7.         <!--{ad/portaldropdown/gg_full wrapfix}-->
  8.         <!--[diy=diy1]-->
  9.         <div id="diy1" class="area"></div>
  10.         <!--[/diy]-->
  11.         <div id="bd">
  12.                 <!-- 顶部推荐区begin -->
  13.                 <div class="top-recommends cl">
  14.                         <div class="newest-card">
  15.                                 <!--[diy=diy_panels]-->
  16.                                 <div id="diy_panels" class="area"></div>
  17.                                 <!--[/diy]-->
  18.                         </div>
  19.                         <div alog-alias="favsites" class="favsites-nav">
  20.                                 <!--[diy=diy_gamenav]-->
  21.                                 <div id="diy_gamenav" class="area"></div>
  22.                                 <!--[/diy]-->                                
  23.                         </div>
  24.                 </div>
  25.                 <!-- 顶部推荐区end -->
复制代码


接下来简单说说广告的流程

evalcode()函数返回数组[check,create]

check:当前模块是否为广告投放范围,否则false;

create:当check为true时,建立组装广告代码(这里就可以灵活变动了)

check和create的值均为字符串语句,

后台添加广告时由/source/admincp/admincp_adv.php处理存入数据库common_advertisement,

启用广告时由/source/function/cache/cache_advs.php处理,build_cache_advs()函数读取common_advertisement表中所有的广告属性(adv_protaldropdown.php中的setting)建立缓存保存在common_syscache表中,

全局钩子系统处理广告钩子所展示的广告时就进入广告执行阶段由/source/function/function_core.php中的adshow()函数执行adv_protaldropdown.php中evalcode()函数返回的字符串语句(@eval($evalcode['create'])),然后create中所组装的广告代码就得以展示,

注意在调试时可以将代码直接插入到adshow函数测试,测试通过后将代码转义再放在adv_portaldropdown.php中的evalcode()函数中。

以上是个人理解的流程整理。。。。。。

实在是写不下去了!!!!
discuz X3.2 自定义系统广告详解 自定义,定义,系统,广告,详解
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.149.245.230,GMT+8, 2024-11-8 18:21 , Processed in 0.281637 second(s), 79 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表