当前位置:首页 > 技术文章 > openx > openx改造工程三:关于排期系统的多日期时间选择
openx改造工程三:关于排期系统的多日期时间选择
文章来源:本站原创  浏览次数:208  发布日期:2013-04-16
OPENX的排期系统,其实是很简陋的,只能选择俩个时间段进行显示广告。在做排期的时候,总是听到销售部门的抱怨,所以研究了一下,它这个排期控制,看看能否进行多日期的控制;

其实实现的方法有很多,我这里抱砖引玉,举个例子:
1、首先找到一套js的日期选择器,并做修改,要达到如下的效果;

openx改造工程三:关于排期系统的多日期时间选择

2、然后到campaign-edit.php文件下,找到buildDateFormSection这个方法,把一下四句代码贴进去,构建一个选择日期的txt文本域;

$form->addElement ( 'header', 'datastrspan', "select date" );
//section decorator to allow hiding of the section
$form->addDecorator ( 'datastrspan', 'tag', array ('attributes' => array ('id' => 'datastrspan', 'class' => 'large' ) ) );
 
//exclusive and low - weight only (this group is artificial - there's one field only,
//but I want it to get proper size)
$date_select_by_x ['datastr'] = $form->createElement_x ( 'text', 'datastr', null, array ('id' => 'datastr' ,'class' => 'large' ,'onfocus'=>'HS_setDate(this)') );
$form->addGroup ( $date_select_by_x, 'date_select_by_x', "select date", null, false );
3、在数据库中插入一个字段用来存放这个时间值,也可以使用comments注释字段。一般这个字段都没有用;

获取值,和插入值都在campaign-edit.php文件中;


4、接下来就要找到sql了,做判断了。分别到spc.php(如果你用了SPC机制投放广告);ajs.php下;

找到方法OA_Dal_Delivery_getZoneLinkedAdInfos,在sql中加入."c.commentsAS comments, "取出这个字段的内容,然后找到函数_adSelectCheckCriteria()下的;
if ($expire > 0 && $now > $expire) {
OX_Delivery_logMessage('Campaign has expired for bannerid '.$aAd['ad_id'], 7);
return false;
}

这一句是判断排期有没有过期,将这里的逻辑替换成我们需要的逻辑

$conf = $GLOBALS['_MAX']['CONF'];
 
if (!empty ($aAd['comments'])) {
$datestr = explode( '|' , $aAd['comments']);
$t = time();
$now = mktime(0,0,0,date('m',$t),date('d',$t),date('Y',$t));
// echo $now;exit;
$result_check=false;
for($i=1;$i<count($datestr);$i++)
{
// echo strtotime($datestr[$i]);exit;
if ($now == strtotime($datestr[$i]))
{
OX_Delivery_logMessage('Campaign has expired for bannerid '.$aAd['ad_id'], 7);
$result_check=true;
break;
}
}
if ($result_check==false)
return false;
// $now = MAX_commonGetTimeNow ();
}

这样,openx的排期就可以支持多日期的选择了,方便了对项目的控制,方法比较简单,还存在很多可以优化的地方。

原文来自:openx改造工程三:关于排期系统的多日期时间选择 http://www.redyun.net/technology/83.html

红云案例Case