HT = $this->load->database('HT', TRUE); } /** * function 用于提取指定页面关联的广告 * $pageurl:需要展示广告的页面url * $place: 广告位 */ public function get_advertise_by_url($pageurl, $place = false) { //获取当前页面关联的广告 $data = array(); $site_code = Site_Code; //$site_code = 'gm'; $ad_list = $this->get_advertise($site_code, $pageurl, $place); //尝试根据当前页面的信息ID来提取广告 //CH统一只用URL查询 if (empty($ad_list)) { $info_detail = $this->get_detail($pageurl); if (empty($info_detail)) return array(); $ad_list = $this->get_advertise($site_code, $pageurl, $place, $info_detail->ic_id); } //当前页面没有关联广告的话,取父级节点的广告代替 if (empty($ad_list)) { //获取父级信息节点关联的适用于当前页面的广告 $parent_ads = $this->get_parent_ads($info_detail->is_path, $site_code, time(), $place); if (empty($parent_ads)) { //url匹配不到数据的话,尝试用父节点的信息内容ic_id来匹配 $parent_ads = $this->get_parent_ads($info_detail->is_path, $site_code, time(), $place, true); } if (empty($parent_ads)) return array(); //重新排序,方便提取直接父节点的广告数据 $temp = array(); foreach ($parent_ads as $p) { $temp[$p->is_id][] = $p; } //优先获取直接父节点关联的广告,以此类推 $is_id_array = explode(',', $info_detail->is_path); krsort($is_id_array); foreach ($is_id_array as $isid) { if ($isid != '' && isset($temp[$isid])) { $ad_list = $temp[$isid]; break; } } } //返回当前页面所有广告位的广告,按广告索引 $advertise = array(); if (!empty($ad_list)) { foreach ($ad_list as $ad) { $advertise[$ad->ad_place] = $ad; } } return $advertise; } //获取指定页面指定位置的广告 public function get_advertise($site_code, $adp_ic_url, $ad_place = false, $ic_id = false) { $adp_ic_url = $ic_id ? $ic_id : $adp_ic_url; //当url匹配不到数据的时候该用信息内容ID匹配 $mapsql = $ad_place == false ? '' : " AND ad_place='$ad_place' "; $sql = "SELECT adp_id, adp_ic_url, adp_forself, ad_id, ad_is_id, ad_title, ad_content, ad_expire, ad_place, ad_sitecode, ad_status, ad_createtime FROM infoAdvertise LEFT JOIN infoAdvertisePage ON ad_id=adp_ad_id WHERE ad_status=1 AND adp_ic_url='$adp_ic_url' AND ad_sitecode=? AND ad_expire>? $mapsql"; $query = $this->HT->query($sql, array($site_code, time())); //echo ''; $result = $query->result(); return $result; } //获取父级信息节点关联的可以用于子节点的广告 public function get_parent_ads($path, $site_code, $ad_expire, $ad_place = false, $icid_flag = false) { $compare_string = $icid_flag ? 'convert(nvarchar, ic_id)' : 'ic_url'; //当url匹配不到数据的时候该用信息内容ID匹配 $path = $path . "0"; $mapsql = $ad_place == false ? '' : " AND ad_place='$ad_place' "; $sql = " SELECT ad_id, ad_is_id, ad_title, ad_content, ad_expire, ad_place, ad_sitecode, ad_status, ad_createtime, is_id FROM infoAdvertise LEFT JOIN infoAdvertisePage ON ad_id=adp_ad_id LEFT JOIN infoContents ON adp_ic_url={$compare_string} LEFT JOIN infoStructures ON ic_id=is_ic_id AND is_id in ($path) WHERE ad_sitecode=? and is_sitecode=? and ad_status=1 AND (adp_forself=1 or (adp_forself = 3 AND adp_ic_url LIKE {$compare_string})) AND ad_expire>? $mapsql"; $query = $this->HT->query($sql, array($site_code, $site_code, $ad_expire)); //echo ''; $result = $query->result(); return $result; } public function get_detail($url) { $sql = "SELECT TOP 1 * FROM infoContents a INNER JOIN infoStructures b ON a.ic_id = b.is_ic_id WHERE ic_url = ? AND ic_status = 1 AND ic_sitecode = 'ah'"; $query = $this->HT->query($sql, array($url)); $row = $query->row(); return $row; } }