GetOne("SELECT COUNT(*) AS dd FROM `#@__co_htmls` WHERE nid='$nid' AND isdown='1' "); $totalcc = $mrow['dd']; $rrow = $dsql->GetOne("SELECT channelid,usemore FROM `#@__co_note` WHERE nid='$nid' "); $channelid = $rrow['channelid']; $usemore = $rrow['usemore']; } else { $mrow = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__co_htmls` WHERE isdown='1' "); $totalcc = $mrow['dd']; } include DedeInclude("templets/co_export.htm"); exit(); } else { require_once(DEDEINC.'/dedecollection.class.php'); $channelid = isset($channelid) && is_numeric($channelid) ? $channelid : 0; $typeid = isset($typeid) && is_numeric($typeid) ? $typeid : 0; $pageno = isset($pageno) && is_numeric($pageno) ? $pageno : 1; $startid = isset($startid) && is_numeric($startid) ? $startid : 0; $endid = isset($endid) && is_numeric($endid) ? $endid : 0; if(!isset($makehtml)) $makehtml = 0; if(!isset($onlytitle)) $onlytitle = 0; if(!isset($usetitle)) $usetitle = 0; if(!isset($autotype)) $autotype = 0; $co = new DedeCollection(); $co->LoadNote($nid); $orderway = (($co->noteInfos['cosort']=='desc' || $co->noteInfos['cosort']=='asc') ? $co->noteInfos['cosort'] : 'desc'); if($channelid==0 && $typeid==0) { ShowMsg('请指定默认导出栏目或频道ID!','javascript:;'); exit(); } if($channelid==0) { $row = $dsql->GetOne("SELECT ch.* FROM `#@__arctype` tp LEFT JOIN `#@__channeltype` ch ON ch.id=tp.channeltype WHERE tp.id='$typeid'; "); } else { $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$channelid'; "); } if(!is_array($row)) { echo "找不到频道内容模型信息,无法完成操作!"; exit(); } //分析规则,并生成临时的SQL语句 $channelid = $row['id']; $maintable = $row['maintable']; $addtable = $row['addtable']; if(empty($maintable)) $maintable = '#@__archives'; if(empty($addtable)) { echo "找不主表配置信息,无法完成操作!"; exit(); } $adminid = $cuserLogin->getUserID(); //微索引表 $indexSqlTemplate = "INSERT INTO `#@__arctiny`(`arcrank`,`typeid`,`channel`,`senddate`,`sortrank`) VALUES ('$arcrank','@typeid@' ,'$channelid','@senddate@', '@sortrank@'); "; //基本信息主表 $mainSqlTemplate = "INSERT INTO `$maintable`(id,typeid,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,source,litpic,pubdate,senddate,mid,description,keywords) VALUES ('@aid@','@typeid@','@sortrank@','@flag@','0','$channelid','$arcrank','0','0','@title@','','','@writer@','@source@','@litpic@','@pubdate@','@senddate@','$adminid','@description@','@keywords@'); "; //生成附加表插入的SQL语句 $inadd_f = $inadd_v = ''; $dtp = new DedeTagParse(); $dtp->SetNameSpace('field','<','>'); $dtp->LoadString($row['fieldset']); foreach($dtp->CTags as $ctag) { $tname = $ctag->GetTagName(); $inadd_f .= ",`$tname`"; $notsend = $ctag->GetAtt('notsend'); $fieldtype = $ctag->GetAtt('type'); if($notsend==1) { //对不同类型设置默认值 if($ctag->GetAtt('default')!='') { $dfvalue = $ctag->GetAtt('default'); } else if($fieldtype=='int' || $fieldtype=='float' || $fieldtype=='number') { $dfvalue = '0'; } else if($fieldtype=='dtime') { $dfvalue = time(); } else { $dfvalue = ''; } $inadd_v .= ",'$dfvalue'"; } else { $inadd_v .= ",'@$tname@'"; } } $addSqlTemplate = "INSERT INTO `{$addtable}`(`aid`,`typeid`{$inadd_f}) Values('@aid@','@typeid@'{$inadd_v})"; //导出数据的SQL操作 $dtp = new DedeTagParse(); $totalpage = $totalcc / $pagesize; $startdd = ($pageno-1) * $pagesize; if(!empty($nid)) { $dsql->SetQuery("SELECT * FROM `#@__co_htmls` WHERE nid='$nid' AND isdown='1' ORDER BY aid $orderway LIMIT $startdd,$pagesize"); } else { $dsql->SetQuery("SELECT * FROM `#@__co_htmls` WHERE isdown='1' ORDER BY aid $orderway LIMIT $startdd,$pagesize"); } $dsql->Execute(); while($row = $dsql->GetObject()) { if(trim($row->result=='')) continue; //$addSqlTemplate,$mainSqlTemplate,$indexSqlTemplate $ntypeid = ($autotype==1 && $row->typeid != 0) ? $row->typeid : $typeid; $indexSql = str_replace('@typeid@', $ntypeid, $indexSqlTemplate); $mainSql = str_replace('@typeid@', $ntypeid, $mainSqlTemplate); $addSql = str_replace('@typeid@', $ntypeid, $addSqlTemplate); $dtp->LoadString($row->result); $exid = $row->aid; if(!is_array($dtp->CTags)) continue; //获取时间和标题 $pubdate = $sortrank = time(); $title = $row->title; $litpic = ''; foreach ($dtp->CTags as $ctag) { $itemName = $ctag->GetAtt('name'); if($itemName == 'title' && $usetitle==0) { $title = trim($ctag->GetInnerText()); if($title=='') { $title = $row->title; } } else if($itemName == 'pubdate') { $pubdate = trim($ctag->GetInnerText()); if(preg_match("#[^0-9]#", $pubdate)) { $pubdate = $sortrank = GetMkTime($pubdate); } else { $pubdate = $sortrank = time(); } } else if($itemName == 'litpic') { $litpic = trim($ctag->GetInnerText()); } } //检测重复标题 $title = addslashes($title); if($onlytitle) { $testrow = $dsql->GetOne("SELECT COUNT(ID) AS dd FROM `$maintable` WHERE title LIKE '$title'"); if($testrow['dd']>0) { echo "数据库已存在标题为: {$title} 的文档,程序阻止了此本条内容导入
\r\n"; continue; } } //替换固定的项目 $senddate = time(); $flag = ''; if($litpic!='') $flag = 'p'; //随机推荐 if($randcc>0) { $rflag = mt_rand(1, $randcc); if($rflag==$randcc) { $flag = ($flag=='' ? 'c' : $flag.',c'); } } $indexSql = str_replace('@senddate@', $senddate, $indexSql); $indexSql = str_replace('@sortrank@', $sortrank, $indexSql); $mainSql = str_replace('@flag@', $flag, $mainSql); $mainSql = str_replace('@sortrank@', $sortrank, $mainSql); $mainSql = str_replace('@pubdate@', $pubdate, $mainSql); $mainSql = str_replace('@senddate@', $senddate, $mainSql); $mainSql = str_replace('@title@', cn_substr($title, $cfg_title_maxlen), $mainSql); //$mainSql = str_replace('@title@', cn_substr($title, 60), $mainSql); 原来的语句,采集的文章导出到栏目后标题不全 $addSql = str_replace('@sortrank@', $sortrank, $addSql); $addSql = str_replace('@senddate@', $senddate, $addSql); //替换模型里的其它字段 foreach($dtp->CTags as $ctag) { if($ctag->GetName()!='field') { continue; } $itemname = $ctag->GetAtt('name'); $itemvalue = addslashes(trim($ctag->GetInnerText())); $mainSql = str_replace("@$itemname@", $itemvalue, $mainSql); $addSql = str_replace("@$itemname@", $itemvalue, $addSql); } //插入数据库 $rs = $dsql->ExecuteNoneQuery($indexSql); if($rs) { $aid = $dsql->GetLastID(); $mainSql = str_replace('@aid@', $aid, $mainSql); $addSql = str_replace('@aid@', $aid, $addSql); $mainSql = preg_replace("#@([a-z0-9]{1,})@#", '', $mainSql); $addSql = preg_replace("#@([a-z0-9]{1,})@#", '', $addSql); $rs = $dsql->ExecuteNoneQuery($mainSql); if(!$rs) { echo "导入 '$title' 时错误:".$dsql->GetError()."
"; $dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE id='$aid' "); } else { $rs = $dsql->ExecuteNoneQuery($addSql); if(!$rs) { echo "导入 '$title' 时错误:".$dsql->GetError()."
"; $dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE id='$aid' "); $dsql->ExecuteNoneQuery("DELETE FROM `$maintable` WHERE id='$aid' "); } } } $dsql->ExecuteNoneQuery("UPDATE `#@__co_htmls` SET isexport=1 WHERE aid='$exid' "); } //检测是否完成或后续操作 if($totalpage <= $pageno) { if($channelid>0 && $makehtml==1) { if( $autotype==0 && !empty($nid) ) { $mhtml = "makehtml_archives_action.php?typeid=$typeid&startid=$startid&endid=$endid&pagesize=20"; ShowMsg("完成数据导入,准备生成文档HTML...",$mhtml); exit(); } else { ShowMsg("完成所有数据导入,请手工更新HTML!","javascript:;"); exit(); } } else { ShowMsg("完成所有数据导入!","javascript:;"); exit(); } } else { if($totalpage>0) { $rs = substr(($pageno / $totalpage * 100), 0, 2); } else { $rs = 100; } $pageno++; $gourl = "co_export.php?dopost=done&nid=$nid&totalcc=$totalcc&channelid=$channelid&pageno=$pageno"; $gourl .= "&nid=$nid&typeid=$typeid&autotype=$autotype&arcrank=$arcrank&pagesize=$pagesize&randcc=$randcc"; $gourl .= "&startid=$startid&endid=$endid&onlytitle=$onlytitle&usetitle=$usetitle&makehtml=$makehtml"; ShowMsg("完成 {$rs}% 导入,继续执行操作...",$gourl,'',500); exit(); } }