广告管理系统使用说明文档

DEMO:页面右侧栏底部是广告

一. 广告填写注意事项

1.择选广告关联的信息页面的时候,如果是手工页面,也就是不在信息平台里面的,请填写该页面的url链接;

2.如果是信息平台里面的信息页面,可以选择填页面的url链接,也可以填它在信息平台里的信息内容ID,就是信息标题旁边那个ID;

3.信息平台里面的信息有url的话,建议优先填url,没有url的信息再填信息ID;

二. 读取广告到网前的规则(可以按照各站的策略自行决定,此处只是举个例子)

1.查看当前页面是否在广告系统里关联了广告;

2.如果有关联广告,则直接读取该广告到网前;

3.如果没有关联广告,并且当前页面信息存在于信息平台,则查看它的父节点是否关联了广告,优先读取最接近的父级节点的广告;

二. 读取广告到网前及点击效果跟踪

网前JS调用广告

<script type="text/javascript">

function get_advertise() 

{

    var url="<?php echo site_url('index.php/diy_tour/ajax/get_advertise'); ?>";

    var pageurl=location.href;

    $.post(url,{"pageurl":pageurl},function(json_data) {

       if (!json_data) return false;

       var json_data = $.parseJSON(json_data);

       for (var key in json_data) {

         var ad_place=json_data[key].ad_place;

         var ad_content='<div class="advertise_elem" data-ad_id="'+json_data[key][ad_place].adp_id+'">'+json_data[key][ad_place].ad_content+'</div>';

         //在对应的地方填充广告

         if (ad_place=='right_nav_bottom'){

             $(".circuit_price").after(ad_content);

         }else if (ad_place=='centent_bottom'){

             $("#included").after(ad_content);        

         }

        }

     });    

}

//保存广告点击数据

$("body").on('click','.advertise_elem a',function(event){

    event.preventDefault();

    var link=$(this).attr('href');

    var adp_id=$(this).parents('.advertise_elem').attr('data-ad_id'),

    url="<?php echo site_url('index.php/diy_tour/ajax/set_advertise_rate'); ?>";

    $.post(url,{"adp_id":adp_id},function(result) {

      location.href=link;

    });

});


</script>

响应js请求的控制器代码

public function get_advertise()

    {

        $this->load->model('Information_model');

        $pageurl=$this->input->post('pageurl');

        $place=$this->input->post('place')?$this->input->post('place'):false;

        //获取当前页面关联的广告

        $pageurl=str_replace('http://'.$this->config->item('Site_Domain'),'',$pageurl);

        //$pageurl=str_replace('http://202.103.68.34:9091','',$pageurl);

        $advertise=$this->Information_model->get_advertise_by_url($pageurl,$place);

        $ad_list=$ad_lists=array();

        foreach ($advertise as $key => $value) {

            foreach ($value as $k => $v) {

                $ad_list[$key][$k]=$v;

            }

            $ad_lists[]=array("ad_place"=>$key,$key=>$ad_list[$key]);

        }

        echo json_encode($ad_lists);

    }


更新广告点击数据

public function set_advertise_rate()

    {

        $this->load->model('Information_model');

        $adp_id=$this->input->post('adp_id');

        if ($this->Information_model->set_advertise_rate($adp_id)) {

            echo 1;

        }

        else{

            echo 0;

        }

    }

模型层读取当前页面相关广告的代码

   /**

    * $pageurl:需要展示广告的页面url

    * $place: 广告位

    * $loadview:0 返回广告列表,1 直接输出广告内容

    */

    public function get_advertise_by_url($pageurl,$place=false)

    {

        //获取当前页面关联的广告

        $data=array();

        $site_code=$this->config->item('Site_Code');

        $ad_list=$this->get_advertise($site_code,$pageurl,$place);

        

        //尝试根据当前页面的信息ID来提取广告

        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;

        $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()));

        $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?'ic_id':'ic_url';

        $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,

                         adp_id

                    FROM infoAdvertise 

                         LEFT JOIN infoAdvertisePage ON ad_id=adp_ad_id

                         LEFT JOIN infoContents  ON adp_ic_url=convert(nvarchar, $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 AND ad_expire>? $mapsql";

        $query = $this->HT->query($sql,array($site_code,$site_code,$ad_expire));

        $result = $query->result();

        return $result;

    }

更新广告点击数

public function set_advertise_rate($adp_id)

    {

        if (empty($adp_id)) {

            return false;

        }

        $sql = "UPDATE  infoAdvertisePage

                   SET  adp_click=adp_click+1

                 WHERE  adp_id=?";

        $result = $this->HT->query($sql, array($adp_id));

        return $result;

    }