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(参数)限制(关键词)广告显示的更多相关文章

  1. Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  2. koa-router中路由/后面不填参数就会报404的解决办法

    koa-router 中使用路由参数时会遇到一个问题,就是像下面的代码在没有传入 id 是会报 404 错误 router.get('/:id', (err, ctx, next) => { / ...

  3. Eclipse中自动提示的方法参数都是arg0,arg1的解决方法

    Eclipse中自动提示的方法参数都是arg0,arg1,就不能根据参数名来推断参数的含义,非常不方便. 解决方法:Preferences->Java->Installed JREs,发现 ...

  4. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

      C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...

  5. URL地址中使用中文作为的参数【转】

    原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...

  6. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  7. 在VS中向命令行添加参数的方法

    在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...

  8. R中的par()函数的参数

    把R中par()函数的主要参数整理了一下(另外本来还整理了每个参数的帮助文档中文解释,但是太长,就分类之后,整理为图表,excel不便放上来,就放了这些表的截图)

  9. 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...

随机推荐

  1. [译]reset, checkout和revert

    git reset, git checkout, git revert能让你撤销你本地仓储的一些修改,  前两种命令可以作用于commit或者一个文件. Commit级别的操作 注意了git reve ...

  2. tyvj1198 最优矩阵连乘

    描述    一个n*m矩阵由n行m列共n*m个数排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算量为nmp.   矩阵乘法满 ...

  3. iOS程序启动流程(留有问题)

    程序的简单运行流程: 读取Main.storyboard文件 创建箭头所指的ViewController对象 根据storyboard文件中描述创建ViewController的UIView对象 将U ...

  4. [Data Structure] Bit-map空间压缩和快速排序去重

    Bit-map是一种很巧妙的数据存储结构.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素.由于采用了Bit为单位来存储数据,可以大大节省存储空间.Bit-ma ...

  5. Total Commander 集成、调用 Beyond Compare比较文件

    1.打开wincmd.ini文件 2.在[Configuration]节下加入 Comparetool=d:\Program Files\小工具\Beyond Compare 3\BCompare.e ...

  6. 配置php.ini实现PHP文件上传功能

    本文介绍了如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项,这些 ...

  7. make 和 makefile 的关系

    程序的 编译 和 链接 要先总结 make 和 makefile,就需要先了解下面这个过程: 预编译:也叫预处理,进行一些文本替换工作,比如将 #define 定义的内容,在代码中进行替换: 编译:将 ...

  8. C++ 异常机制

    程序在运行的时候可能产生各种可预料到的异常,例如磁盘不足,内存不足,或是数学运算溢出,数组越界之类的.为了解决这些问题,C++提供了异常处理机制,它一般是由try语句和catch语句构成. 一.try ...

  9. Apache 启动.htaccess 的操作方法

    配置apache主配置文件(httpd.conf) 1.查找“#LoadModule rewrite_module modules/mod_rewrite.so” 去掉前面的#号 2.把AllowOv ...

  10. Linux 下测试串口的命令microcom

    昨天应为要测试主板上的串口,查了一下,可以使用microcom 这条命令进行测试. 命令使用方法很简单: Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPE ...