You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
5.4 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Advertise_model extends CI_Model
{
function __construct() {
parent::__construct();
$this->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 '<!--'.$this->HT->last_query().'-->';
$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 '<!--' . $this->HT->last_query() . '-->';
$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;
}
}