Openx读全部字段的Bug

来源:互联网 发布:什么软件找工作最好 编辑:程序博客网 时间:2024/04/29 01:43
Admin_DA:: _getEntities( $entity, $aParams, $allFields) 被设计为读取一个实体对象,这跟Java里的JPA设计极相似。例如
Admin_DA:: _getEntities( 'ad', $aParams, $allFields) 取出的是广告对象。但坑爹的是 $allFields 这个参数。按照设想,如果$allFields 设为TRUE,应该读出对象里的所有属性,包括数据表里的每个字段。在前面的文章里介绍过,OpenX 通过一个配置文件 db_schema.ini 来声明每个字段,那么读取出来的字段应该是跟配置文件一一对应。事实上并非如此。
通过阅读代码发现,方法里有这么一句
$aColumns = SqlBuilder:: _getColumns($entity, $aParams, $allFields);
再继续挖下去,原来字段名称都硬编码在这里了,ini 文件被无视了。囧

case 'ad' :            $aColumns += array ('d.bannerid' => 'ad_id', 'd.campaignid' => 'placement_id', 'd.status' => 'status' , 'd.description' => 'name', 'd.storagetype' => 'type' , 'd.ext_bannertype' => 'ext_bannertype');            if ($allFields) $aColumns += array( 'd.contenttype' => 'contenttype' , 'd.pluginversion' =>'pluginversion', 'd.filename' => 'filename' , 'd.imageurl' => 'imageurl', 'd.htmltemplate' => 'htmltemplate' , 'd.htmlcache' => 'htmlcache', 'd.width' => 'width' , 'd.height' => 'height' , 'd.weight' => 'weight', 'd.seq'=> 'seq' , 'd.target' => 'target' , 'd.url' => 'url', 'd.alt' => 'alt' , 'd.statustext' => 'statustext' , 'd.bannertext' => 'bannertext', 'd.adserver' => 'adserver' , 'd.block' => 'block', 'd.capping' => 'capping' , 'd.session_capping' => 'session_capping', 'd.compiledlimitation' => 'compiledlimitation', 'd.prepend' =>'prepend' , 'd.append' => 'append', 'd.bannertype' => 'bannertype' , 'd.alt_filename' => 'alt_filename' , 'd.alt_imageurl' => 'alt_imageurl', 'd.alt_contenttype' => 'alt_contenttype' , 'd.comments' => 'comments','d.parameters' => 'parameters' , 'd.transparent' => 'transparent');            break ;

如果要读出自定义的字段,必须在这里加上。