首页 > CMS > PhpCMS > 正文

PHPCMS V9跨站调用推荐位URL为空问题的解决办法

2024-09-10 07:15:42
字体:
来源:转载
供稿:网友

如题,如果你在使用PHPCMS V9的时候需要在不同的站点之间调用推荐位可能会出现链接的URL为空的情况,具体解决办法如下,该办法适合20130522 之前版本.

一、在自定义函数中加入下面的函数:

  1. /**  
  2.  * 获取内容地址  
  3.  * @param $catid   栏目ID  
  4.  * @param $id      文章ID  
  5.  * @param $allurl  是否以绝对路径返回  
  6.  */   
  7. function go_dusion($catid,$id$allurl = 0) {   
  8.     static $category;   
  9.     if(emptyempty($category)) {   
  10.         $siteids = getcache('category_content','commons');   
  11.         $siteid = $siteids[$catid];   
  12.         $category = getcache('category_content_'.$siteid,'commons');   
  13.     }   
  14.    
  15.     if($siteid == '' || emptyempty($siteid)) {   
  16.         $siteids = getcache('category_content','commons');   
  17.         $siteid = $siteids[$catid];   
  18.         $category = getcache('category_content_'.$siteid,'commons');   
  19.     }   
  20.        
  21.     $id = intval($id);   
  22.     if(!$id || !isset($category[$catid])) return '';   
  23.        
  24.     $modelid = $category[$catid]['modelid'];   
  25.     if(!$modelidreturn '';       
  26.     $db = pc_base::load_model('content_model');   
  27.     $db->set_model($modelid);   
  28.     $r = $db->get_one(array('id'=>$id), '`url`');   
  29.     if (!emptyempty($allurl)) {   
  30.         if (strpos($r['url'], '://')===false) {   
  31.             if (strpos($category[$catid]['url'], '://') === FALSE) {   
  32.                 $site = siteinfo($category[$catid]['siteid']);   
  33.                 $r['url'] = substr($site['domain'], 0, -1).$r['url'];   
  34.             } else {   
  35.                 $r['url'] = $category[$catid]['url'].$r['url'];   
  36.             }   
  37.         }   
  38.     }   
  39.        
  40.        
  41.     return $r['url'];   

第二:在content/classes/content_tag.class.php 的 public function position($data)函数中,代码如下:

  1. /**  
  2.      * 推荐位  
  3.      * @param $data  
  4.      */   
  5.     public function position($data) {   
  6.         $sql = '';   
  7.         $array = array();   
  8.         $posid = intval($data['posid']);   
  9.         $order = $data['order'];   
  10.         $thumb = (emptyempty($data['thumb']) || intval($data['thumb']) == 0) ? 0 : 1;   
  11.         //Du修改   
  12.         if(isset($data['siteid']) && is_numeric($data['siteid'])){   
  13.             $siteid = $data['siteid'];   
  14.         }else{   
  15.             $siteid = $GLOBALS['siteid'] ? $GLOBALS['siteid'] : 1;   
  16.         }   
  17.            
  18.         $catid = (emptyempty($data['catid']) || $data['catid'] == 0) ? '' : intval($data['catid']);   
  19.         if($catid) {   
  20.             $siteids = getcache('category_content','commons');   
  21.             if(!$siteids[$catid]) return false;   
  22.             $siteid = $siteids[$catid];   
  23.             $this->category = getcache('category_content_'.$siteid,'commons');   
  24.         }   
  25.         if($catid && $this->category[$catid]['child']) {   
  26.             $catids_str = $this->category[$catid]['arrchildid'];   
  27.             $pos = strpos($catids_str,',')+1;   
  28.             $catids_str = substr($catids_str$pos);   
  29.             $sql = "`catid` IN ($catids_str) AND ";   
  30.         }  elseif($catid && !$this->category[$catid]['child']) {   
  31.                 $sql = "`catid` = '$catid' AND ";   
  32.         }   
  33.         if($thumb$sql .= "`thumb` = '1' AND ";   
  34.         if(isset($data['where'])) $sql .= $data['where'].' AND ';   
  35.         if(isset($data['expiration']) && $data['expiration']==1) $sql .= '(`expiration` >= /''.SYS_TIME.'/' OR `expiration` = /'0/' ) AND ';   
  36.         $sql .= "`posid` = '$posid' AND `siteid` = '".$siteid."'";   
  37.         $pos_arr = $this->position->select($sql'*'$data['limit'],$order);   
  38.         if(!emptyempty($pos_arr)) {   
  39.             foreach ($pos_arr as $info) {   
  40.                 $key = $info['catid'].'-'.$info['id'];   
  41.                 $array[$key] = string2array($info['data']);   
  42.                 $array[$key]['url'] = go_dusion($info['catid'],$info['id']);                   
  43.                    
  44.                 $array[$key]['id'] = $info['id'];   
  45.                 $array[$key]['catid'] = $info['catid'];   
  46.                 $array[$key]['listorder'] = $info['listorder'];   
  47.             }   //Vevb.com 
  48.         }   
  49.         return $array;   
  50.     }   

即可,注意看两处红色区域,11-16行是为了获取siteID 可以根据情况不修改也可以42行,即将原来 的go 改为 go_dusion其它不变即可.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表