openx中如何使用site-variable(参数)限制(关键词)广告显示
openx是个很强大的广告管理系统,可以根据不同的情况显示不同的广告。其中可以根据get参数值的不同来显示,即delivery limitation中的site-variable选项,name表示变量名,value表示值。比如在gender=male时显示男士用品广告,在 gender=female时显示女性用品广告。
但是实际使用时,发现不起作用,跟踪后发现,openx无法获得gender的值,原因在于url中的get变量没有传递给openx的js代码。于是在js代码中加入
- document.write (’&gender=<?php echo $gender; ?>’);
有关信息可以参考:http://openxaddons.com/openx/targeting-ads-using-site-variable这种调用方法固然可以,但每次更改都需要变动代码,对开发者来说毫无意义,博主教你一种方法:
打开/openx/plugins/deliveryLimitations/Site/Variable.delivery.php,在末尾加入
- function parse_query($var){
- $var = html_entity_decode(parse_url($var,PHP_URL_QUERY));
- $var = explode(‘&’, $var);
- $arr = array();
- foreach($var as $val){
- $x = explode(‘=’, $val);
- $arr[$x[0]] = $x[1];
- }
- unset($val, $x, $var);
- return $arr;
- }
之后在请求前调用此方法
- if (empty($aParams)) {
- //请求参数为空时调用_REQUEST参数
- $aParams = $_REQUEST;
- }
合并参数
- $aParams=array_merge($aParams,parse_query($aParams['loc']));
这样即可让openx获得get变量。不用去修改js。缺点就是rewrite成静态url的链接中没有get变量,此方法就无效,这时可采用其他限制条件。
值得注意时候请求参数如果含有中文的话,得注意编码问题,否则无法选择性的显示广告。
{php $keywords=iconv("GBK","UTF-8",$head_keywords);}
- <?php
- /*
- +---------------------------------------------------------------------------+
- | Revive Adserver |
- | http://www.revive-adserver.com |
- | |
- | Copyright: See the COPYRIGHT.txt file. |
- | License: GPLv2 or later, see the LICENSE.txt file. |
- +---------------------------------------------------------------------------+
- */
- require_once MAX_PATH . '/lib/max/Delivery/limitations.delivery.php';
- /**
- * Check if a value passed into the ad request (through $_REQUEST (so GET/POST/COOKIE)
- * via a name=value pair matches the limitation configured
- *
- * @param string $limitation The variable limitation
- * @param string $op The operator
- * @param array $aParams An array of additional parameters to be checked
- * @return boolean Whether this impression's channel passes this limitation's test.
- * @author Chris Nutting <chris.nutting@openx.org>
- * @author Mohammed El-Hakim
- */
- function MAX_checkSite_Variable($limitation, $op, $aParams = array()){
- if (empty($aParams)) {
- $aParams=$_REQUEST;
- }
- $aParams=array_merge($aParams,parse_query($aParams['loc']));
- $key = substr($limitation, 0, strpos($limitation, '|'));
- $value = substr($limitation, strpos($limitation, '|')+1);
- if (!isset($limitation) || !isset($aParams[$key])) {
- // To be safe, unless the paramters passed in, and configured are avaiable,
- // return depending on if the $op is considered a 'positive' test
- return !MAX_limitationsIsOperatorPositive($op);
- } else if (MAX_limitationsIsOperatorNumeric($op)) {
- return MAX_limitationMatchNumeric($key, $value, $op, $aParams);
- } else {
- //如检测到未符合条件的广告,则无条件显示
- //@file_put_contents("/data/www/ad/var/cache/ddd.txt",var_export($op.strpos($aParams[$key],$value),true));
- if(strpos($aParams[$key],$value)===false)
- return !MAX_limitationsIsOperatorPositive("");
- return MAX_limitationsMatchString($key,$value,$op, $aParams);
- }
- }
- /**
- * 解析变量地址访问页面前地
- */
- function parse_query($var){
- $var=html_entity_decode(parse_url($var,PHP_URL_QUERY));
- $var=explode('&',$var);
- $arr=array();
- foreach($var as $val){
- $x=explode('=',$val);
- $arr[$x[0]]=$x[1];
- }
- unset($val, $x, $var);
- return $arr;
- }
- ?>
openx中如何使用site-variable(参数)限制(关键词)广告显示的更多相关文章
- Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- koa-router中路由/后面不填参数就会报404的解决办法
koa-router 中使用路由参数时会遇到一个问题,就是像下面的代码在没有传入 id 是会报 404 错误 router.get('/:id', (err, ctx, next) => { / ...
- Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
Eclipse中自动提示的方法参数都是arg0,arg1,就不能根据参数名来推断参数的含义,非常不方便. 解决方法:Preferences->Java->Installed JREs,发现 ...
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...
- URL地址中使用中文作为的参数【转】
原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...
- SQL Server存储过程中使用表值作为输入参数示例
这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...
- 在VS中向命令行添加参数的方法
在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...
- R中的par()函数的参数
把R中par()函数的主要参数整理了一下(另外本来还整理了每个参数的帮助文档中文解释,但是太长,就分类之后,整理为图表,excel不便放上来,就放了这些表的截图)
- 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型
之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...
随机推荐
- IntelliJ IDEA 14.x 快捷键/个性化设置
常用快捷键设置(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> Keymap -> ...
- 更改CentOS 6.3 yum源为国内163源
CentOS5.x: http://mirrors.163.com/.help/CentOS5-Base-163.repo CentOS6.x: http://mirrors.163.com/.hel ...
- Linux文件查找命令 find 详解
关于find命令 由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权 ...
- struts2表单批量提交
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> <% ...
- thinkphp一对多HAS_MANY
关联关系通常我们所说的关联关系包括下面三种:一对一关联 :ONE_TO_ONE,包括HAS_ONE 和 BELONGS_TO 一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELON ...
- python之路十一
RabbitMQ基本概念RabbitMQ , 是一个使用 erlang 编写的 AMQP (高级消息队列协议) 的服务实现. 简单来说, 就是一个功能强大的消息队列服务.通常我们谈到队列服务, 会有三 ...
- senlin __init__() got an unexpected keyword argument 'additional_headers'
从senlin源码重新编译更新了服务,然后执行 senlin的 cli就遇到了错误: __init__() got an unexpected keyword argument 'additional ...
- [Android Pro] 常用的android工具类和库
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...
- hdu 2594 Simpsons’ Hidden Talents
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594 思路:将两个串连起来求一遍Next数组就行长度为两者之和,遍历时注意长度应该小于两个串中的最小值 ...
- 简单Java算法程序实现!斐波那契数列函数~
java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...