程序员人生 网站导航

向GOOGLE提交sitemap记录重复问题

栏目:DedeCMS时间:2014-03-31 21:14:15

  网(LieHuo.Net)教程 关于SupeSite7.0,向GOOGLE提交sitemap记录重复问题。用下面的代码覆盖admin文件夹下面的admin_sitemap.php文件内容即可。修改后的程序在重复记录后面加上了分页。

  修正了在静态配置下的错误。

<?php

/*
 [SupeSite] (C) 2007-2009 Comsenz Inc.
 $Id: admin_sitemap.php 11878 2009-03-30 03:11:53Z zhaofei $
*/

if(!defined('IN_SUPESITE_ADMINCP')) {
 exit('Access Denied');
}

//权限
if(!checkperm('managesitemap')) {
 showmessage('no_authority_management_operation');
}

//组建html url
$htmlurl = H_URL;
if(!strexists($htmlurl, '://')) $htmlurl = S_URL_ALL.substr(H_DIR, 1);

$addclass = $viewclass = $slogidarr = '';
$listarr = array();
$sitemapdata = array('index'=>'', 'file' => array());
$baidu_style = 'none';
$google_style = '';
$options = array('always'=>'always', 'hourly'=>'hourly', 'daily'=>'daily', 'weekly'=>'weekly', 'monthly'=>'monthly', 'yearly'=>'yearly', 'never'=>'never');
$start = empty($_GET['start']) ? 0 : intval($_GET['start']);
$countnum = 0;
$lastfileid = 0;
$sitemap_path = S_ROOT.'./data/sitemap/';
if(!file_exists($sitemap_path)) {
 @mkdir($sitemap_path, '0666');
}

if(submitcheck('thevalue')) {
 if(!preg_match("/^[0-9a-z_]+$/i", $_POST['mapname']) || strlen($_POST['mapname']) > 50) {
  showmessage('sitemap_name_error');
 }
 $mapdata = addslashes(serialize($sitemapdata));
 $_POST['maptype'] = saddslashes(shtmlspecialchars($_POST['maptype']));
 $_POST['mapnum'] = $_POST['maptype'] == 'google' ? intval($_POST['mapnum_google']) : intval($_POST['mapnum_baidu']);
 $_POST['createtype'] = intval($_POST['createtype']);
 $_POST['changefreq'] = $_POST['maptype'] == 'google' ? saddslashes(shtmlspecialchars($_POST['changefreq_google'])) : saddslashes(shtmlspecialchars($_POST['changefreq_baidu']));
 if(!empty($_POST['slogid'])) {
  $_SGLOBAL['db']->query("UPDATE ".tname('sitemaplogs')." SET mapname='$_POST[mapname]', maptype='$_POST[maptype]', mapnum='$_POST[mapnum]', createtype='$_POST[createtype]', changefreq='$_POST[changefreq]' WHERE slogid='$_POST[slogid]'");
  showmessage('sitemap_config_update', $theurl);
 } else {
  $query = $_SGLOBAL['db']->query("SELECT count(*) FROM ".tname('sitemaplogs')." WHERE mapname='$_POST[mapname]'");
  if($value = $_SGLOBAL['db']->result($query,0)) {
   showmessage('sitemap_name_exists');
  }
  $_SGLOBAL['db']->query("INSERT INTO ".tname('sitemaplogs')."(mapname, maptype, mapnum, mapdata, createtype, changefreq) VALUES ('$_POST[mapname]', '$_POST[maptype]', '$_POST[mapnum]', '$mapdata', '$_POST[createtype]', '$_POST[changefreq]')");
  showmessage('sitemap_config_add', $theurl);
 }

} elseif(submitcheck('listsubmit')) {
 if(!empty($_POST['slogidarr'])) {
  $slogidarr = implode('','', $_POST['slogidarr']);
  $_SGLOBAL['db']->query('DELETE FROM '.tname('sitemaplogs').' WHERE slogid IN (''.$slogidarr.'')');
 }
 showmessage('robotmessage_op_success', $theurl);
}

if(empty($_GET['op'])) {
 $viewclass = ' class="active"';
 $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('sitemaplogs'));
 while($value = $_SGLOBAL['db']->fetch_array($query)) {
  $value['dateline'] = sgmdate($value['dateline']);
  $listarr[] = $value;
 }
} elseif($_GET['op'] == 'add') {
 $addclass = ' class="active"';
 $thevalue = array('slogid'=>'', 'maptype'=>'google', 'dateline'=>'', 'createtype'=>'', 'lastitemid'=>'', 'mapnum' => '');
} elseif($_GET['op'] == 'edit') {
 $_GET['slogid'] = intval($_GET['slogid']);
 $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('sitemaplogs')." WHERE slogid='$_GET[slogid]'");
 $thevalue = $_SGLOBAL['db']->fetch_array($query);
 $thevalue['dateline'] = sgmdate($thevalue['dateline']);
 if($thevalue['maptype'] == 'baidu') {
  $baidu_style = '';
  $google_style = 'none';
  $disabled = 'disabled';
 } else {
  $baidu_style = 'none';
  $google_style = '';
  $disabled = '';
 }
} elseif($_GET['op'] == 'update') {
 $count_key = array();
 $key_xml = "";
 if(is_dir($sitemap_path) && is_writable($sitemap_path)){
  $_GET['slogid'] = intval($_GET['slogid']);
  $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('sitemaplogs')." WHERE slogid='$_GET[slogid]'");
  if($value = $_SGLOBAL['db']->fetch_array($query)) {
   $value['lastitemid'] = intval($value['lastitemid']) > 0 ? intval($value['lastitemid']) : 1;
   $sitemapdata = unserialize($value['mapdata']);
   $sitemapdata['index'] = $value['mapname'].'.xml';
   $limit = $idvalue = $itemurl = '';

   $fp = @fopen(S_ROOT.$sitemapdata['index'], 'w+');
   if($value['maptype'] == 'baidu') {
    $limit = 'ORDER BY itemid DESC limit '.$value['mapnum'];
    $submiturl = "http://news.baidu.com/newsop.html#ks5";
    write('<?xml version="1.0" encoding="'.($_SCONFIG['charset'] == 'gbk' ? 'GB2312' : $_SCONFIG['charset']).'"?>');
    write('<document>');
    write('<webSite>'.S_URL_ALL.'</webSite>');
    write('<webMaster>'.$adminemail.'</webMaster>');
    write('<updatePeri>'.$value['changefreq'].'</updatePeri>');
   } else {
    $limit = 'ORDER BY itemid limit '.$value['mapnum'];
    $submiturl = "https://www.google.com/webmasters/sitemaps/";
   }
   //重新生成
   if($value['createtype'] == '0' && empty($start)) {
    $value['lastitemid'] = 0;
    $value['lastfileid'] = 0;
    $sitemapdata['file'] = array();
   }

   $i = $n = 0;
   $query = $_SGLOBAL['db']->query("SELECT max(itemid) FROM ".tname('spaceitems')." WHERE type='news' AND folder='1'");
   $countnum =$_SGLOBAL['db']->result($query, 0);
   $query = $_SGLOBAL['db']->query("SELECT si.itemid, si.type, si.uid, si.dateline, si.subject, si.username, sn.message FROM ".tname('spaceitems')." si, ".tname('spacenews')." sn WHERE si.type='news' AND si.itemid = sn.itemid AND si.itemid > $value[lastitemid] AND si.folder='1' ".$limit);
   while($itemvalue = $_SGLOBAL['db']->fetch_array($query)) {
    $itemvalue['dateline'] = sgmdate($itemvalue['dateline'], "Y-m-d H:i:s");
    $itemvalue['subject'] = htmlspecialchars(strip_tags(trim($itemvalue['subject'])));
                $itemvalue['message'] = htmlspecialchars(strip_tags(trim($itemvalue['message'])));
    $itemvalue['username'] = htmlspecialchars(strip_tags(trim($itemvalue['username'])));
    
    if($_SCONFIG['urltype'] != 4 && $_SCONFIG['urltype'] != 5) {
     $itemurl = geturl("action/viewnews/itemid/$itemvalue[itemid]", 2);
    } else {
     $itemurl = geturl("action/viewnews/itemid/$itemvalue[itemid]", 0);
    }

    //判断后缀
    if(!empty($_SSCONFIG['pagepostfix'])&&$_SSCONFIG['pagepostfix']=='.html'){
     $suffix = '.html';
    }elseif(!empty($_SSCONFIG['pagepostfix'])&&$_SSCONFIG['pagepostfix']!='.html'){
     $suffix = $_SSCONFIG['pagepostfix'];
    }else{
     $suffix = '.html';
    }
    
    //取出后缀位置,并截取
    $num_suffix = strrpos($itemurl,$suffix);
    if($num_suffix){
     $itemurl = substr($itemurl,0,$num_suffix);
    }

    //判断分页数
    $key_xml = $itemurl;
    if($count_key[$key_xml]==1||$count_key[$key_xml]>1){
     $count_key[$key_xml] = $count_key[$key_xml] + 1;
    }else{
     $count_key[$key_xml] = 1;
    }
    
    //存在静态页面,按静态页面来计算
    $idvalue = ($itemvalue['itemid']>9)?substr($itemvalue['itemid'], -2, 2):$itemvalue['itemid'];
    if($count_key[$key_xml]==1){
     $htmlpath = $idvalue.'/n-'.$itemvalue['itemid'].'.html';
    }else{
     $htmlpath = $idvalue.'/n-'.$itemvalue['itemid'].'-'.$count_key[$key_xml].'.html';
    }

    if(file_exists(H_DIR.'/'.$htmlpath)) {
     $itemurl = $htmlurl.'/'.$htmlpath;
    }else{
     if($_SSCONFIG['htmlviewnews']==1){
      $num_middle  = strrpos($itemurl,'html');
      $itemurl  = $num_middle?substr($itemurl,0,$num_middle):$itemurl;
      if($num_middle){
       if($_SSCONFIG['urltype']==1){//简短通用模式
        $itemurl = $itemurl.'?viewnews-'.$itemvalue['itemid'];
       }elseif($_SSCONFIG['urltype']==2){//简短apache模式
        $itemurl = $itemurl.'index.php/viewnews-'.$itemvalue['itemid'];
       }elseif($_SSCONFIG['urltype']==3){//简短rewrite模式
        $itemurl = $itemurl.'viewnews-'.$itemvalue['itemid'];
       }elseif($_SSCONFIG['urltype']==4){//高效通用模式
        $itemurl = $itemurl.'?action-viewnews-itemid-'.$itemvalue['itemid'];
       }elseif($_SSCONFIG['urltype']==5){//高效apache模式
        $itemurl = $itemurl.'index.php/action-viewnews-itemid-'.$itemvalue['itemid'];
       }
      }
     }
     if($count_key[$key_xml]>1){
       $itemurl = $itemurl."-page-".$count_key[$key_xml];
     }
     $itemurl = !empty($_SSCONFIG['pagepostfix'])?$itemurl.$_SSCONFIG['pagepostfix']:$itemurl;
    }
    $key_xml = "";

    //防止$siteurl没有填时
    if(!strexists($itemurl, '://')) {
     $itemurl = S_URL_ALL.$itemurl;
    }

    if($value['maptype'] == 'google') {
     $n = floor($i / $value['mapnum']) + $value['lastfileid'];
     $sitemapfile = S_URL_ALL.'/data/sitemap/'.$value['mapname'].'_'.$n.'.xml';
     $urlarr[$n][] = $itemurl;
     if(!in_array($sitemapfile, $sitemapdata['file'])) {
      $sitemapdata['file'][] = $sitemapfile;
     }
    } elseif($value['maptype'] == 'baidu') {
     write('<item>');
     write('<title>'.$itemvalue['subject'].'</title>');
     write('<link>'.$itemurl.'</link>');
     write('<text>'.$itemvalue['message'].'</text>');
     write('<image />');
     write('<source>'.S_URL_ALL.'</source>');
     write('<author>'.$itemvalue['username'].'</author>');
     write('<pubDate>'.$itemvalue['dateline'].'</pubDate>');
     write('</item>');
    }
    $value['lastitemid'] = $itemvalue['itemid'] > $value['lastitemid'] ? $itemvalue['itemid'] : $value['lastitemid']; //更新最后的itemid为当前的itemid值
    $i++;
   }

   if($value['maptype'] == 'baidu') {
    write('</document>', 1);
    fclose($fp);
   } else {
    write('<?xml version="1.0" encoding="UTF-8"?>');
    write('<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">');
    if(!empty($sitemapdata['file'])) {
     rsort($sitemapdata['file']);
     foreach($sitemapdata['file'] as $filevalue) {
      write('<sitemap>');
      write('<loc>'.$filevalue.'</loc>');
      write('<lastmod>'.sgmdate($_SGLOBAL['timestamp'], 'Y-m-d').'</lastmod>');
      write('</sitemap>');
     }
    }
    fclose($fp);
    if(!empty($urlarr)) {
     foreach($urlarr as $n=>$itemurlarr) {
      $sitemapfile = $sitemap_path.$value['mapname'].'_'.$n.'.xml';
      if($fp = @fopen($sitemapfile, 'w+')) {
       write('<?xml version="1.0" encoding="utf-8"?>');
       write('<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">');
       foreach($itemurlarr as $url) {
        write('<url>');
        write('<loc>'.$url.'</loc>');
        write('<lastmod>'.sgmdate($_SGLOBAL['timestamp'], 'Y-m-d').'</lastmod>');
        write('<changefreq>'.$value['changefreq'].'</changefreq>');
        write('</url>');
       }
      }
      write('</urlset>');
      fclose($fp);
     }
    }
   }
   
   $lastfileid = count($sitemapdata['file']);
   $mapdata = addslashes(serialize(($sitemapdata)));
   $_SGLOBAL['db']->query("UPDATE ".tname('sitemaplogs')." SET lastitemid='$value[lastitemid]', dateline='$_SGLOBAL[timestamp]', mapdata='$mapdata', lastfileid='$lastfileid' WHERE slogid='$value[slogid]'");
   if($value['lastitemid'] < $countnum) {
    showmessage($alang['sitemap_start_create'].$value['lastitemid'].'->'.($value['lastitemid']+$value['mapnum']).$alang['sitemap_start_create_1'], $theurl.'&op=update&start=1&slogid='.$value['slogid']);
   }  else {
    if($value['maptype'] == 'google') {
     $fp = @fopen(S_ROOT.$sitemapdata['index'], 'a+');
     write('</sitemapindex>');
     fclose($fp);
    }
    showmessage(S_URL_ALL.'/'.$sitemapdata['index'].'</a><br />'.$alang['sitemap_info'].'<a href="'.S_URL_ALL.'/'.$sitemapdata['index'].'">Sitemap</a>, '.$alang['sitemap_info_0'].'<a href="'.$submiturl.'">Sitemap</a>', $theurl, 20);
   }
  }
 } else {
  showmessage('sitemap_perm_error');
 }
}

print<<<END
 <script>
 function changemaptype(obj) {
  if(obj.value == 'baidu') {
   document.getElementById('typehtml_baidu').style.display = '';
   document.getElementById('typehtml_google').style.display = 'none';
   document.getElementById('createtype_baidu').disabled = true;
   document.getElementById('createtype_google').disabled = true;
  } else {
   document.getElementById('typehtml_baidu').style.display = 'none';
   document.getElementById('typehtml_google').style.display = '';
   document.getElementById('createtype_baidu').disabled = false;
   document.getElementById('createtype_google').disabled = false;
  }
 }
 </script>
 <table summary="" id="pagehead" cellpadding="0" cellspacing="0" border="0" width="100%">
 <tr>
 <td><h1>$alang[sitemap_paper_maps]</h1></td>
 <td class="actions">
  <table summary="" cellpadding="0" cellspacing="0" border="0" align="right">
  <tr>
  <td$viewclass><a href="$theurl" class="view">$alang[sitemap_config_view]</a></td>
  <td$addclass><a href="$theurl&op=add" class="add">$alang[sitemap_config_add]</a></td>
  </tr>
  </table>
 </td>
 </tr>
 </table>
 <table cellspacing="2" cellpadding="2" class="helptable"><tr><td>$alang[sitemap_help]</td></tr></table>
END;

if(!empty($listarr)) {
 $formhash = formhash();
 print<<<END
  <form method="post" action="$theurl" name="thevalueform" enctype="multipart/form-data" onSubmit="return listsubmitconfirm(this)">
  <input type="hidden" name="formhash" value="$formhash">
  <table cellspacing="0" cellpadding="0" width="100%"  class="listtable">
  <tr>
  <th>$alang[words_del]</th>
  <th>$alang[sitemap_name]</th>
  <th>$alang[sitemap_type]</th>
  <th>$alang[sitemap_num]</th>
  <th>$alang[sitemap_createtime]</th>
  <th>$alang[sitemap_createtype]</th>
  <th>$alang[sitemap_lastitemid]</th>
  <th>$alang[spacecache_op]</th>
  </tr>
END;
 foreach($listarr as $value) {
  echo '<tr>';
  echo '<td><input type="checkbox"  class="checkbox" name="slogidarr[]" value="'.$value['slogid'].'"></td>';
  echo '<td>'.$value['mapname'].'</td>';
  echo '<td>'.$value['maptype'].'</td>';
  echo '<td>'.$value['mapnum'].'</td>';
  echo '<td>'.$value['dateline'].'</td>';
  echo '<td>'.$alang['sitemap_createtype_'.$value['createtype']].'</td>';
  echo '<td>'.$value['lastitemid'].'</td>';
  echo '<td align="center"><a href="'.$theurl.'&op=edit&slogid='.$value['slogid'].'">'.$alang['robot_robot_op_edit'].'</a>|<a href="'.$theurl.'&op=update&slogid='.$value['slogid'].'">'.$alang['generation_sitemap_clicking_here'].'</a></td></tr>';
 }
 echo '</table>';
 echo '<table cellspacing="0" cellpadding="0" width="100%"  class="btmtable">';
 echo '<tr><th><input type="checkbox" name="chkall" onclick="checkall(this.form, 'slogid')">'.$alang['space_select_all'].'</th></tr>';
 echo '</table>';
 echo '<div class="buttons">';
 echo '<input type="submit" name="listsubmit" value="'.$alang['common_submit'].'" class="submit"> ';
 echo '<input type="reset"  value="'.$alang['common_reset'].'">';
 echo '</div>';
 echo '</form>';
}

if(!empty($thevalue)) {
 echo '<form method="post" action="'.$theurl.'" name="thevalueform" enctype="multipart/form-data">';
 echo '<input type="hidden" name="formhash" value="'.formhash().'">';
 echo '<table cellspacing="0" cellpadding="0" width="100%"  class="maintable">';
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_name'].'</th><td><input type="text" name="mapname" size="30" value="'.$thevalue['mapname'].'"></td></tr>';
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_type'].'</th><td><input type="radio" name="maptype" size="30" value="baidu" '.($thevalue['maptype'] == 'baidu' ? 'checked' : '').' onclick="changemaptype(this)">Baidu <input type="radio" name="maptype" size="30" value="google" '.($thevalue['maptype'] == 'google' ? 'checked' : '').' onclick="changemaptype(this)">Google</td></tr>';
 echo '<tbody id="typehtml_baidu" style="display:'.$baidu_style.'">';
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_changefreq'].'</th><td><input type="text" name="changefreq_baidu" value="'.(is_numeric($thevalue['changefreq']) ? $thevalue['changefreq'] : 15).'" id="changefreq_baidu"></td></tr>';
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_num'].'</th><td><input type="text" name="mapnum_baidu" size="30" value="'.(empty($thevalue['mapnum']) ? 100 : $thevalue['mapnum']).'"></td>';
 echo '</tbody>';
 echo '<tbody id="typehtml_google" style="display:'.$google_style.'">';
 echo label(array('type' => 'select', 'name'=>'changefreq_google', 'options'=>$options, 'value'=>$thevalue['changefreq'], 'alang'=>$alang['sitemap_changefreq']));
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_num'].'</th><td><input type="text" name="mapnum_google" size="30" value="'.(empty($thevalue['mapnum']) ? 5000 : $thevalue['mapnum']).'"></td>';
 echo '</tbody>';
 echo '<tr id="tr_subject"><th>'.$alang['sitemap_createtype'].'</th><td><input id="createtype_baidu" type="radio" name="createtype" size="30" value="0" '.(($thevalue['createtype'] == 0) ? 'checked' : '').' '.$disabled.'>'.$alang['sitemap_createtype_0'].' <input id="createtype_google" type="radio" name="createtype" size="30" value="1" '.(($thevalue['createtype'] == 1) ? 'checked' : '').' '.$disabled.'>'.$alang['sitemap_createtype_1'].'</td></tr>';
 echo '</table>';
 echo '<div class="buttons">';
 if($_GET['op'] == 'edit'){
  echo '<input type="hidden" name="slogid" value="'.$thevalue['slogid'].'">';
 }
 echo '<input type="submit" name="thevalue" value="'.$alang['common_submit'].'" class="submit"> ';
 echo '<input type="reset"  value="'.$alang['common_reset'].'">';
 echo '</div>';
 echo '</form>';
}

function write($text, $n=0) {
 global $fp;
 if(empty($n)) {
  fwrite($fp, $text."");
 } else {
  fwrite($fp, $text."");
 }
}
?>

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐