PHPCMS X

phpcms多站点下推送文章到其他站点:
有的小伙伴用phpcmsx建立多个网站,用到的也就是phpcms站群功能,很多时候会发现需要跨站推送文章,在PHPCMS中跨站推送文章的功能并不完善,PHPCMSX将该功能修改并记录在此。

phpcms多站点下推送文章到其他站点
有的小伙伴用phpcmsx建立多个网站,用到的也就是phpcms站群功能,很多时候会发现需要跨站推送文章,在PHPCMS中跨站推送文章的功能并不完善,PHPCMSX将该功能修改并记录在此。
2020-09-01 07:38:58  来源:PHPCMSX

    在phpcms中跨站推送文章内容,默认仅复制推送了文章主表内的信息,附表中的数据没有推送到另一个站点的附表下,并且文章推送到另一个站点后变成转向链接的形式,为了解决这些问题,请参考下面完整的修改代码


db = pc_base::load_model('content_model');  //加载数据模型
	}
	
	/**
	 * 接口处理方法,参数1:要推送的文章数组        参数2:旧的模型id及旧的栏目id
	 * @param array $param 属性 请求时,为模型、栏目数组。提交添加为二维信息数据 。例:array(1=>array('title'=>'多发发送方法', ....))
	 * @param array $arr 参数 表单数据,只在请求添加时传递。 例:array('modelid'=>1, 'catid'=>12); 
	 */
	public function category_list($param = array(), $arr = array()) {
		//确认推送按钮
		if ($arr['dosubmit']) {
			$id = $_POST['id'];//要批量推送的文章id,如:39|38|37
			if(empty($id)) return true;
			$id_arr = explode('|',$id);//要批量推送的文章id数组
			if(count($id_arr)==0) return true;
			$old_catid = intval($_POST['catid']);//旧栏目id
			if(!$old_catid) return true;
			$ids = $_POST['ids'];//推送栏目,如:6|68
			if(empty($ids)) return true;
			$ids = explode('|', $ids);//推送栏目id数组
			$siteid = intval($_POST['siteid']);//站点id
			$siteids = getcache('category_content','commons');//所有栏目对应的站点id
			$oldsiteid = $siteids[$old_catid];//旧站点id
			$this->categorys = getcache('category_content_'.$oldsiteid,'commons');//旧站点下所有栏目信息
			$modelid = $this->categorys[$old_catid]['modelid'];//旧栏目所属的模型id
			$this->db->set_model($modelid);//根据模型id设置对应的模型表
			$tablename = $this->db->table_name;
			$this->hits_db = pc_base::load_model('hits_model');//点击率统计表
			foreach($id_arr as $id) {//要批量推送的文章id数组
				$this->db->table_name = $tablename;//模型表
				$r = $this->db->get_one(array('id'=>$id));//根据当前文章id获取该文章详细信息
				
				//weiyanhui添加
				//附属表	
				$this->db->table_name = $this->db->table_name.'_data';
				$r2 = $this->db->get_one(array('id'=>$id));//内容字段在附表中
				if($r2) {
					$r = array_merge($r,$r2);
				} else {
					$r = $r;
				}
				//weiyanhui添加结束
				
				
				$linkurl = preg_match('/^http[s]?:\/\//',$r['url']) ? $r['url'] : siteurl($siteid).$r['url'];
				foreach($ids as $catid) {//推送栏目,如:6|68
					$siteid = $siteids[$catid];//推送到哪个站点id下的栏目
					$this->categorys = getcache('category_content_'.$siteid,'commons');//推送站点下所有的栏目信息
					$modelid = $this->categorys[$catid]['modelid'];//推送栏目所属模型id
					$this->db->set_model($modelid);//根据模型id设置对应的模型表
						$newid = $this->db->insert(
						array('title'=>$r['title'],//标题
							'style'=>$r['style'],
							'thumb'=>$r['thumb'],//缩略图
							'keywords'=>$r['keywords'],//关键词
							'description'=>$r['description'],//描述
							'status'=>$r['status'],//状态
							'catid'=>$catid,//栏目id
							'url'=>$linkurl,//旧的链接地址
							'sysadd'=>1,//系统添加
							'username'=>$r['username'],//作者
							'inputtime'=>$r['inputtime'],//发布时间
							'updatetime'=>$r['updatetime'],//更新时间
							//'islink'=>1 //默认值为1:外部链接
							'islink'=>0 //weiyanhui添加
						),true);//将文章内容发布到推送栏目,并返回新插入的文章id
						$this->db->table_name = $this->db->table_name.'_data';//模型附表
						//将文章内容推送到其它站点后,将islink字段值修改为0,然后再重新发布一下,即可生成文章静态页到当前站点当前栏目下
						//思考:1-可以在附表入库前将islink字段值设置为0  2-将内容入库附表
						//$this->db->insert(array('id'=>$newid));//新插入的文章id存储到附表中,注意:文章内容没有被存储到附表中
						$this->db->insert(array('id'=>$newid,'content'=>$r['content']));//weiyanhui添加
						$hitsid = 'c-'.$modelid.'-'.$newid;
						$this->hits_db->insert(array('hitsid'=>$hitsid,'catid'=>$catid,'updatetime'=>SYS_TIME));//点击量统计表
				}
			}
			return true;
		} else {
			$siteid = get_siteid();
			$this->categorys = getcache('category_content_'.$siteid,'commons');
			$tree = pc_base::load_sys_class('tree');
			$tree->icon = array('   │ ','   ├─ ','   └─ ');
			$tree->nbsp = '   ';
			$categorys = array();
			$this->catids_string = array();
			if($_SESSION['roleid'] != 1) {
				$this->priv_db = pc_base::load_model('category_priv_model');
				$priv_result = $this->priv_db->select(array('action'=>'add','roleid'=>$_SESSION['roleid'],'siteid'=>$siteid,'is_admin'=>1));
				$priv_catids = array();
				foreach($priv_result as $_v) {
					$priv_catids[] = $_v['catid'];
				}
				if(empty($priv_catids)) return '';
			}
			foreach($this->categorys as $r) {
				if($r['siteid']!=$siteid || $r['type']!=0) continue;
				if($_SESSION['roleid'] != 1 && !in_array($r['catid'],$priv_catids)) {
					$arrchildid = explode(',',$r['arrchildid']);
					$array_intersect = array_intersect($priv_catids,$arrchildid);
					if(empty($array_intersect)) continue;
				}
				if($r['child']) {
					$r['checkbox'] = '';
					$r['style'] = 'color:#8A8A8A;';
				} else {
					$checked = '';
					if($typeid && $r['usable_type']) {
						$usable_type = explode(',', $r['usable_type']);
						if(in_array($typeid, $usable_type)) {
							$checked = 'checked';
							$this->catids_string[] = $r['catid'];
						}
					}
					$r['checkbox'] = "";
					$r['style'] = '';
				}
				$categorys[$r['catid']] = $r;
			}
			$str  = "\$checkbox\$spacer\$catname";
			$tree->init($categorys);
			$categorys = $tree->get_tree(0, $str);
			return $categorys;
		}
    }
}
?>