dedecms建站问题集锦

1、dedecms去除版权中的Power by DedeCms
在这里插入图片描述
a、powerby标签如何调用:首先进入后台,选择 系统 -> 系统基本参数 -> 站点设置
b、在网站版权信息栏中编写自己的版权信息,支持html代码,写好后确定保存。
c、然后在网站的footer.htm文件中用标签{dede:global.cfg_powerby/}进行调用。
d、更新网站后,在版权信息中就显示了刚才设置的版权信息,可是却多了dede自带的链接“Power by DedeCms”。
e、接着在dede根目录下的include文件夹内找到文件“dedesql.class.php”。打开找到如下图中的代码段(通常在第588至592行),注释掉,然后更新网站即可。

在这里插入图片描述
2、强烈建议data/common.inc.php文件属性设置为644(Linux/Unix)或只读(NT):
liunx服务器设置的方法:
FTP登陆服务器,进入data目录,找到common.inc.php文件,单击右键选择文件权限(或者属性)

在这里插入图片描述
将原有属性的数字值改为:444(不是644)就可以了。如果你的服务器没有配置FTP,可以使用命令chmod 444来改变文件属性。

windows服务器设置的方法:
远程登录服务器,找到common.inc.php文件,鼠标右键属性 -> 安全 -> 编辑,选择网站所属用户进行编辑。对写入权限勾选拒绝即可。如图:

在这里插入图片描述
3、如何提高织梦dedecms的安全性:
一、基本设置:
1、将dedecms数据库默认的表前缀dede改掉
2、后台登录开启验证码,将默认管理员admin删除,改成一个复杂点的账号,密码
3、程序安装好后务必删除install目录
4、将dedecms后台管理默认目录名dede改掉
5、后台的文件管理(管理目录下file_manage_xxx.php),不用的可以删掉
6、用不到的功能一概关闭,比如会员,评论等,如果没有必要通通在后台关闭
7、不需要SQL命令运行器的将dede/sys_sql_query.php 文件删除
8、不需要tag功能请将根目录下的tag.php删除
9、不需要顶客请将根目录下的digg.php与diggindex.php删除
10、dedecms官方发布的安全补丁,及时打上补丁
11、下载发布功能(管理目录下soft__xxx_xxx.php),不用的话可以删掉。
12、DedeCms官网出的万能安全防护代码,打开config_base.php文件,找到以下这段代码:

//禁止用户提交某些特殊变量
$ckvs = Array('_GET','_POST','_COOKIE','_FILES');
foreach($ckvs as $ckv){
  if(is_array($$ckv)){
    foreach($$ckv AS $key => $value)
      if(eregi("^(cfg_|globals)",$key)) unset(${$ckv}[$key]);
  }
}

改为下面这段代码:

//把get、post、cookie里的<? 替换成 <?
$ckvs = Array('_GET','_POST','_COOKIE');
foreach($ckvs as $ckv){
  if(is_array($$ckv)){
    foreach($$ckv AS $key => $value)
      if(!empty($value)){
        ${$ckv}[$key] = str_replace('<'.'?','&'.'lt;'.'?',$value);
        ${$ckv}[$key] = str_replace('?'.'>','?'.'&'.'gt;',${$ckv}[$key]);
      }
      if(eregi("^cfg_|globals",$key)) unset(${$ckv}[$key]);
  }
}
//检测上传的文件中是否有PHP代码,有直接退出处理
if (is_array($_FILES)) {
	foreach($_FILES AS $name => $value){
	  ${$name} = $value['tmp_name'];
	  $fp = @fopen(${$name},'r');
	  $fstr = @fread($fp,filesize(${$name}));
	  @fclose($fp);
	  if($fstr!='' && ereg("<\?",$fstr)){
	      echo "你上传的文件中含有危险内容,程序终止处理!";
	      exit();
	  }
	}
}

理论上这样可以杜绝入侵者通过后台上传php文件到网站下,但是同时自己也将不能通过管理员后台上传php文件到空间。
13、最安全的方式:本地发布html,然后上传到空间。不包含任何动态内容,理论上最安全,不过维护相对来说比较麻烦。
14、以下一些是可以删除的目录:
member会员功能 special专题功能 company企业模块 plus\guestbook留言板
15、以下是可以删除的文件:
管理目录下的这些文件是后台文件管理器,属于多余功能,而且最影响安全,许多HACK都是通过它来挂马的
file_manage_control.php;file_manage_main.php;file_manage_view.php;media_add.php;media_edit.php;media_main.php
16、将/data/文件夹移到Web访问目录外,这条是dedecms官方建议,具体操作方法如下:
(1) 将/data/文件夹移至web根目录的上一级目录
(2)修改/include/common.inc.php中DEDEDATA变量,将:define(‘DEDEDATA’,DEDEROOT.’/data’); 改为define(‘DEDEDATA’,DEDEROOT.’/…/data’);
(3)修改/index.php,删除如下代码(注:如首页生成静态且index.html索引优先于index.php可忽略此条修改。):

if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
{
header('Location:install/index.php');
exit();
}

(4)配置tplcache缓存文件目录:登陆后台 > 系统 > 系统基本参数> 性能选项,将模板缓存目录值改为/…/data/tplcache
17、帐号定期修改密码,密码长度在15位以上,且包含数字、字母、最好也包含特殊符号!高强度密码不容易被黑客暴力破解,即使获取到密码的MD5值,也不容易在短期内破解,而经常更换密码又可以最大程度限制MD5被破解的风险!
二、权限设置:
1、 data、templets、uploads、a或5.3的html目录,设置可读写,不可执行的权限;
2、 include、member、plus、后台管理目录设置为可执行脚本,可读,但不可写入(安装了附加模块的,book、ask、company、group 目录同样如此设置)。
三、数据库设置:
1、 不要对网站直接使用MySQL root用户的权限,给每个网站设置独立的MySQL用户帐号,许可权限为:
SELECT, INSERT , UPDATE , DELETE, CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES
由于DEDE并没有任何地方使用存储过程,因此务必禁用FILE、EXECUTE 等执行存储过程或文件操作的权限。
四、常见恶意文件,以备自查:
plus/ac.php;plus/config_s.php ;plus/config_bak.php;plus/diy.php ;plus/ii.php ;plus/lndex.php ;data/cache/t.php ;data/cache/x.php ;data/config.php;data/cache/config_user.php ;data/config_func.php
五、注意网站备份:
包括网站文件的备份和数据库的备份,并在后台进行文件校验、病毒扫描、系统错误修复。

4、织梦CMS v5.7 完美实现导航条下拉二级菜单
首先:将下面这段代码贴到templets\default\footer.htm文件里

 <!-- //二级子类下拉菜单,考虑SEO原因放置于底部 -->
    <script type='text/javascript' src='{dede:global.cfg_cmsurl/}/images/js/dropdown.js'></script>
    {dede:channelartlist typeid='top' cacheid='channelsonlist'}
    <ul id="dropmenu{dede:field.typeid/}" class="dropMenu">
        {dede:channel type='son' noself='yes'}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
    {/dede:channelartlist}
    <script type="text/javascript">cssdropdown.startchrome("navMenu")</script>

然后更新一下,导航栏就出现下拉菜单了,只是背景是透明的,原因是没有背景图片。
下拉菜单是透明的怎么办?
只需把/dede/images里的mmenubg.gif复制到/templets/default/images下面即可。
如果还想做其他的设置,只需要去/templets/default/style/dedecms.css里寻找.dropMenu。

/*-------- 下拉菜单 --------------*/
.dropMenu {
	position:absolute;
	top: 0;
	z-index:100;
	width: 120px;
	visibility: hidden;
    filter: progid:DXImageTransform.Microsoft.Shadow(color=#CACACA, direction=135, strength=4);
	margin-top: -1px;
	border: 1px solid #93E1EB;
	border-top: 0px solid #3CA2DC;
	background-color: #FFF;
	background:url(../images/mmenubg.gif);
	padding-top:6px;
	padding-bottom:6px;
}
 
.dropMenu li {
	margin-top:2px;
	margin-bottom:4px;
	padding-left:6px;
}
.dropMenu a {
	width: auto;
	display: block;
	color: black;
	padding: 2px 0 2px 1.2em;
}
* html .dropMenu a {
	width: 100%;
}
.dropMenu a:hover {
	color:red;
	text-decoration: underline;
}

5、织梦CMS v5.7 完美实现导航条下拉多级菜单(但如果只有一级菜单,导航无法直接链接文章)
修改文件:请将以下php代码全部复制并替换\include\taglib目录下的channel.lib.php文件(务必备份原文件)。

<?php
function lib_channel(&$ctag,&$refObj)
{
    global $_sys_globals,$envs,$dsql;
    $attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = $ctag->GetInnerText();
        $cacheid = trim($cacheid);
    if($cacheid !='') {
        $likeType = GetCacheBlock($cacheid);
        if($likeType != '') return $likeType;
    }

    $reid = 0;
    $topid = 0;
    if(empty($typeid) && $envs['typeid']!=0)
    {
        $typeid = $envs['typeid'];
        $reid = $envs['reid'];
    }else{
        $reid=0;
    }
    if($type==''||$type=='sun') $type="son";
    if($innertext=='') $innertext = GetSysTemplets("channel_list.htm");
    if($reid==0 && $typeid>0)
    {
        $dbrow = $dsql->GetOne("Select reid From dede_arctype where id='$typeid' ");
        if(is_array($dbrow)) $reid = $dbrow['reid'];
    }
    $likeType = '';
    if($type=='top')
    {
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    else if($type=="son")
    {
        //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
        if($typeid==0) {
            return '';
        }
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    else if($type=="self")
    {
        if($reid==0) {
            return '';
        }
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
            From `dede_arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    //And id<>'$typeid'
    $needRel = false;
    $dtp2 = new DedeTagParse();
    $dtp2->SetNameSpace("field","[","]");
    $dtp2->LoadSource($innertext);
    $dsql2 = clone $dsql;
    $dsql->SetQuery($sql);
    $dsql->Execute();
    $line = $row;
        //检查是否有子栏目,并返回rel提示(用于二级菜单)
    if(ereg(':rel', $innertext)) $needRel = true;
   
    if(empty($sql)) return '';
    $dsql->SetQuery($sql);
    $dsql->Execute();
   
    $totalRow = $dsql->GetTotalRow();
    $GLOBALS['autoindex'] = 0;
    for($i=0;$i < $line;$i++)
    {
        if($col>1) $likeType .= "<dl>\r\n";
        for($j=0;$j<$col;$j++)
        {
            if($col>1) $likeType .= "<dd>\r\n";
            if($row=$dsql->GetArray())
            {
                            $row['sonids'] = $row['rel'] = '';
                if($needRel)
                {
                    $row['sonids'] = GetSonIds($row['id'], 0, false);
                    if($row['sonids']=='') $row['rel'] = '';
                    else $row['rel'] = " rel='dropmenu{$row['id']}'";
                }
                //处理同级栏目中,当前栏目的样式
                if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )
                {
                    if($currentstyle!='')
                    {
                    $linkOkstr = $currentstyle;
                    $row['typelink'] = GetOneTypeUrlA($row);
                    $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
                    $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
                    $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
                    $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
                    $likeType .= $linkOkstr;
                    }
                }else
                {
                    $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
                    if(is_array($dtp2->CTags))
                    {
                        foreach($dtp2->CTags as $tagid=>$ctag){
                            if(isset($row[$ctag->GetName()]))
                            {
                                $dtp2->Assign($tagid,$row[$ctag->GetName()]);
                            }
                            elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
                            {
                                $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));
                            }
                        }
                    }
                    $likeType .= $dtp2->GetResult();
                }
            }
            if($col>1) $likeType .= "</dd>\r\n";
            $GLOBALS['autoindex']++;
        }//Loop Col
        if($col>1)
        {
            $i += $col - 1;
            $likeType .= "    </dl>\r\n";
        }
    }//Loop for $i
    reset($dsql2);
    $dsql->FreeResult();
    return $likeType;
}
function lib_channel_son($ctag,$typeid = 0,$dsql2)
{
    $attlist = "row|100,col|1,currentstyle|";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = $ctag->GetInnerText();
    $dsql3 = clone $dsql2;
    $likeType = '';
    //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
    if($typeid==0) {
        return '';
    }
    $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
    //And id<>'$typeid'
    $dtp2 = new DedeTagParse();
    $dtp2->SetNameSpace("field","[","]");
    $dtp2->LoadSource($innertext);
    $dsql2->SetQuery($sql);
    $dsql2->Execute();
    $line = $row;
    for($i=0;$i < $line;$i++)
    {
        if($col>1) $likeType .= "<dl>\r\n";
        for($j=0;$j<$col;$j++)
        {
            if($col>1) $likeType .= "<dd>\r\n";
            if($row=$dsql2->GetArray())
            {
                $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
                if(is_array($dtp2->CTags))
                {
                    foreach($dtp2->CTags as $tagid=>$ctag){
                        if(isset($row[$ctag->GetName()]))
                        {
                            $dtp2->Assign($tagid,$row[$ctag->GetName()]);
                        }
                        elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
                        {
                            $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));
                        }
                    }
                }
                $likeType .= $dtp2->GetResult();
            }
            if($col>1) $likeType .= "</dd>\r\n";
        }//Loop Col
        if($col>1)
        {
            $i += $col - 1;
            $likeType .= "    </dl>\r\n";
        }
    }//Loop for $i
    reset($dsql3);
    $dsql2->FreeResult();
    return $likeType;
}
?>

HTML中:

<style>  //样式根据情况自行调整
  #navMenu ul li { width: 40px; margin-left: 0; background: #2B9B0B; }
  #navMenu ul li a { display: block; }
  .one ul { display: none; margin-left: -10px; }
  .two { position: relative; }
  .two ul { position: absolute; left: 50px; top: 0; }
</style>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script>
  $(function(){
    $("li").mouseenter(function(){  //方法一
      $(this).children("ul").show();
    }).mouseleave(function(){
      $(this).children("ul").hide();
    });
    // $("li").hover(function(){  //方法二
    //   $(this).children("ul").show();
    // },function(){
    //   $(this).children("ul").hide();
    // });
  });
</script>
    <div id="navMenu">
    	<ul>
      	<li class="one"><a href='{dede:global.cfg_cmsurl/}/'><span>首页</span></a></li> //一级导航
        {dede:channel type='top'}
          <li class="one">
            <a href="[field:typelink/]">[field:typename/]</a> //一级导航
            <ul>
              [field:sonchannel0]
                <li class="two">	//二级导航
                  <a href="[field:typelink/]">[field:typename/]</a>
                  <ul>
                    [field:sonchannel1]      //三级导航
                      <li><a href="[field:typelink/]">[field:typename/]</a></li>
                    [/field:sonchannel1]
                  </ul>
                </li>
              [/field:sonchannel0]
            </ul>
          </li>
        {/dede:channel}
    	</ul>
</div>

模板调用:[field:sonchannel0] [/field:sonchannel0] 是用来取子栏目用的,(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签),这个的作用就是当你的栏目有很多子栏目,无限分级的时候方便你取子栏目的。

6、织梦CMS v5.7 实现导航条下拉三级菜单(多个顶级菜单的显示需将下方代码重复使用多次,typeid值不同,另需设置css样式)

<li>
<!-- 显示顶级菜单 -->
    {dede:type typeid='1'}  //typeid为顶级菜单ID,只能写一个ID值
       <a href='[field:typelink/]'>[field:typename/]</a>
    {/dede:type}           
    <ul> 
       {dede:channelartlist type='top' typeid='1'}   //typeid为顶级菜单ID
          <li>
<!-- 显示二级菜单 -->
              <a href='{dede:field name='typeurl'/}'>
                  {dede:field name='typename'/}
              </a> 
<!-- 显示三级菜单 -->                              
              <ul>                                 
              	{dede:sql sql='Select * from dede_arctype where reid=~id~ ORDER BY id limit 0,20'}                           
                  <li>
                	<a href="[field:typedir function='str_replace("{cmspath}/","",@me)'/]/">[field:typename/]</a>
                  </li>
  <!-- 如果路径重复可用下面这种方法,加/DedeCMS/(localhost后面的): 
                  <li><a href="/DedeCMS/[field:typedir function='str_replace("{cmspath}/","",@me)'/]">[field:typename/]</a></li> -->                                 
              	{/dede:sql}                                 
              </ul>                   
           </li>                   
        {/dede:channelartlist} 
     </ul>
</li>

7、彻底解决“模板文件不存在,无法解析文档”(注意: dedecms默认模版必须以htm结尾)
(1)频道封面的栏目,必须要有“列表模板”存在,如果没有可以把高级选项的“列表模板”填上为“封面模板”;
(2)确认模板是 .htm 格式并且没有改动过程序用 .html 格式;
(3)在一键更新网站时提示“模板文件不存在,无法解析文档!”,需要单独去生成“更新栏目HTML”和单独去生成“更新文档HTML”,看到底是栏目模板不存在还是文章模板不存在;
(4)更新栏目HTML提示 “模板文件不存在,无法解析文档!”解决方法,如图:

在这里插入图片描述
打开 /include/arc.listview.class.php 找到

echo "模板文件不存在,无法解析文档!";

改成

echo $this->Fields['typename']." [ID:{$this->TypeID}] ".$GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos['templist']."模板文件不存在,无法解析文档!";

保存后,重新更新栏目HTML,看提示是哪个栏目缺少哪个模板文件,如缺少list_demo.htm,但有list.htm,则可选择list.htm作为模板,文档也同样。

在这里插入图片描述
(5)更新文档HTML “模板文件不存在,无法解析文档!”解决方法,如图:

在这里插入图片描述
打开 /include/arc.archives.class.php 找到

echo "模板文件不存在,无法解析文档!";

改成

echo $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$this->TypeLink->TypeInfos["temparticle"]."模板文件不存在,无法解析文档!";

保存后,重新更新文档HTML,看提示是哪个文档缺少哪个模板文件

在这里插入图片描述
这样修改过,无论是在生成全站、列表、文档、添加文档、编辑文档时提示“模板文件不存在,无法解析文档!”都能清楚知道是哪个模板文件不存在了。
如果修改过后,提示的栏目不在后台栏目里,则需要记下栏目ID,到后台-系统-SQL命令行工具-运行SQL命令行

DELETE FROM `#@__arctype` WHERE id='填你记下的栏目ID'

如果修改过后,提示的文档不在后台档案列表里的话,则需要记下文档ID和标题,到数据库里搜索关键词找到所有出现在表里的记录。

8、添加百度动态地图
第一步、先搜索打开“百度地图开放平台”,点击开发文档下的Web开发下的JavaScript API :

在这里插入图片描述
第二步、点击立即使用:

在这里插入图片描述
第三步、注册百度地图开放平台开发者并激活重新登录百度地图开放平台:

在这里插入图片描述
在这里插入图片描述
第四步、创建应用->选择浏览器端,添加白名单,提交->获得AK秘钥

在这里插入图片描述
在这里插入图片描述
第五步、打开http://api.map.baidu.com/lbsapi/creatmap/创建地图,先切换城市,输入地名快速地位,定位到你要的地址。还可以设置地图,添加标注:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第六步、上面设置完成后,点击获取代码;

在这里插入图片描述
第七步、复制代码,粘贴在需要添加地图的页面内:

在这里插入图片描述
第八步、把前面生成的AK密钥,粘贴到【您的密钥】位置。

在这里插入图片描述
最后、保存,然后生成静态页面。
注意
A、如果弹出在这里插入图片描述可能是未添加白名单。
B、隐藏地图审图号的方法,在地图模板页面地图调用代码上方添加以下样式即可:

<style>
    #mapObj .BMap_cpyCtrl span{display: none !important;}		//此处ID、类及标签不能修改,直接引用即可
</style>

9、织梦后台采集功能详细操作步骤
a、首先打开织梦后台,点击: 采集——采集节点管理——增加新节点

在这里插入图片描述
b、以采集“普通文章”为例,选择:普通文章,点击确定

在这里插入图片描述
c、进入采集设置页面,填写:节点名称,可以任意填写。(一般是:采集网站名—节点名称),然后打开想要采集的文章列表页,以“中国青年网”为例,打开 http://renwu.youth.cn/qncyz/ ,右键查看网页编码

在这里插入图片描述
d、“节点基本信息”填完,其他的一般就不用管了,如图

在这里插入图片描述
e、填写“列表网址获取规则”,对比文章列表第一页http://renwu.youth.cn/qncyz/index.htm和第二页http://renwu.youth.cn/qncyz/index_1.htm的地址,发现除了/index_ 后面的数字不一样,其他的都一样,所以可以这样写http://renwu.youth.cn/qncyz/index_( * ).htm,就是把1换成了( * ),因为这里只有4页,所以我们就填从0到3,每页递增为1。

在这里插入图片描述
f、可能有时采集的列表没有规则,那就只有手工指定列表网址了,如图每行写一个指定列表页面地址。

在这里插入图片描述
g、列表规则写完了,就开始写文章网址匹配规则,回到“文章列表页”鼠标右键查看源文件, 找到区域开始的HTML,就是找文章列表开始的标志。

在这里插入图片描述
< !–content start-- >内容开始点,从这里开始,后面就是文章列表。
h、再找文章列表结束的HTML标志

在这里插入图片描述
< div style=“width:auto;” > 就是这个了,一个很容易找到的标志
i、如果链接中含有图片:不处理或采集为缩略图,可根据需要选择;
对区域网址进行再次筛选(使用正则表达式):必须包含和不能包含,打开源文件,可以看到文章链接都是以.html结束的,所以,在必须包含后面填.html,如果遇到有些很麻烦的列表,还可以填写后面的不能包含。点击保存信息进入下一步设置,可以看到获得的文章网址,看到这些就是对的了。

在这里插入图片描述
j、保存信息进入下一步:设置内容字段获取规则。随便进入一篇文章看看有没有分页,如果没有分页就默认。

在这里插入图片描述
k、然后查找找文章标题、作者、来源及发布时间:随便进入一篇文章,右键查看源文件查找。

在这里插入图片描述
l、依照源码填写

在这里插入图片描述
m、接着填写文章内容的开始、结束标志,和上面一样,找到开始和结束标志。
开始:
在这里插入图片描述
结束:
在这里插入图片描述
填写如下图:
在这里插入图片描述
n、如果想过滤文章中的什么内容就到过滤规则里选择,比如要过滤文章中的图片,选择常用规则,
在这里插入图片描述
再勾选img,然后确定。
在这里插入图片描述
这样就把文章中的图片过滤了。设置完毕后,点击保存设置并预览。

在这里插入图片描述
o、这样一个采集规则就写好了,包括列表页采集规则和内容页采集规则。填写采集指定节点:每页采集(5)条,间隔时间(10)秒

在这里插入图片描述
p、点击保存并开始采集——开始采集网页
在这里插入图片描述
查看采集到的文章
在这里插入图片描述
在这里插入图片描述
q、然后点击导出数据:
首先选择要导入到的栏目,发布选项这里一般默认即可,附带选项一般选“排除重复标题”,至于自动生成HTML那个选项建议先别生成,因为还要批量提取摘要和关键字。
在这里插入图片描述
在这里插入图片描述
10、dedecms后台添加banner图:
a、添加顶级栏目banner:

在这里插入图片描述
b、添加banner图:

在这里插入图片描述
c、下图是站内选择:

在这里插入图片描述
d、模板调用代码:

      {dede:arclist  row='5'  typeid="23"  channelid='1'  addfields='redirecturl'}
        <li><a href="http://[field:redirecturl/]" target="_blank"><img src="[field:litpic/]"></li>
      {/dede:arclist}

注意:在模板中用arclist调用附加表字段必须指定channelid值和要获得的字段。

11、dedecms经常出现"连接数据库失败,可能数据库密码不对或数据库服务器出错"错误的解决方案(如果账号密码都没问题,建议先重启数据库尝试)
在这里插入图片描述
第一种:修改注册表
本方法是微软给出的修改注册表修复该Bug的的方法,原因是默认最大的临时 TCP 端口的数是 5000 适用于一节中包含的产品中。 在这些产品中添加一个新参数。 要提高临时端口的上限,请按照下列步骤操作:
1.启动注册表编辑器。
2.在的注册表中找到以下子项,然后单击 参数 :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.在编辑菜单上单击新建,然后添加下面的注册表项:
数值名称: MaxUserPort
值类型: DWORD
值数据: 65534
有效范围: 5000-65534 (十进制)
默认值: 0x1388 (5000 十进制)
说明: 此参数将控制程序从系统请求任何可用的用户端口时使用的最大端口数。 通常,1024 的值和包含的 5000 之间分配临时的 (短) 端口。
4.退出注册表编辑器,并重新启动计算机。
5.或者直接用下面的方法导入注册表:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe

把上面的内容复制到记录本中,保存为 .reg格式,再双击打开(导入)就OK了
记得重启服务器。

第二种:卸载KB967723补丁(不建议,会引起断网并无法联网的情况。)
登录服务器,进入控制面板 — 添加和删除程序 — (勾选上方的“显示更新”)在里面可以看到更新的KB967723这个补丁,然后就想卸载普通软件一样卸载,卸载中会提示你,如果卸载可能导致程序运行出错,没关系,选择“是”,继续卸载。卸载完成后重启数据库服务器。

猜你喜欢

转载自blog.csdn.net/qq_38882327/article/details/89359037