存档

文章标签 ‘dedecms’

让dedecms的sitemap.html生成在网站根目录

2011年11月24日 没有评论

  很多用DEDECMS做站的朋友,为避免将data目录内的东西随便外泄,在robots中将data目录屏蔽了,但是DEDE默认的网站地图 却是在 data下,屏蔽掉这个文件夹的话搜索引擎就无法抓取到网站地图,这不利于SEO优化,那么有没有好的方法呢,让DEDE生成的网站地图放在系统根目录下面?下面我就给大家介绍一下DEDE网站地图优化方法。

下面是详细的步骤:

1、首先在网站根目录下建立rss文件夹

2、修改/dede/makehtml_map.php文件

将 $cfg_cmspath."/data/sitemap.html";
修改为:$cfg_cmspath."/sitemap.html";
将 $cfg_cmspath."/data/rssmap.html";
修改为:$cfg_cmspath."/rssmap.html";

3、修改/include/arc.rssview.class.php文件

将 $murl = $GLOBALS['cfg_cmspath']."/data/rss/".$this->TypeID.".xml";
修改为:$murl = $GLOBALS['cfg_cmspath']."/rss/".$this->TypeID.".xml";

4、修改/include/sitemap.class.php文件

将以下内容

$typelink = $GLOBALS['cfg_cmsurl']."/data/rss/".$row->id.".xml";
$typelink = $GLOBALS['cfg_cmsurl']."/rss/".$row->id.".xml";

修改为:

$typelink = $GLOBALS['cfg_cmsurl']."/data/rss/".$row->id.".xml";
$typelink = $GLOBALS['cfg_cmsurl']."/rss/".$row->id.".xml";

此时再到网站后台生成网站地图的时候,就会直接生成到网站根目录了。

DEDECMS 列表页面ul li 循环调用

2011年11月22日 1 条评论

之前仿站,在列表页的时候,经常有个问题在困扰,遇到这样的情况应该如何去做调用呢?代码如下:

<div>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第一篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第二篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第三篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第四篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第五篇</a></li>
</ul>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第六篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第七篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第八篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第九篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十篇</a></li>
</ul>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十一篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十二篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十三篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十四篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十五篇</a></li>
</ul>
</div>

终于找到以下代码,将此问题搞定:

<ul>
{dede:list pagesize='24' orderby='pubdate'}
                    [field:global runphp='yes' name=autoindex]
                    $b="</ul><ul>";
                    $a="";
                    if(@me%6==0) @me=$b;
                    else @me=$a;
                    [/field:global]
<li><span>[field:pubdate function="GetDateTimeMK(@me)"/]</span><a href="[field:arcurl/]">[field:title/]</a></li>{/dede:list}
</ul>

dedecms 5.7文章中点击图片进入下一页代码(亲测正常)

2011年11月21日 没有评论

DEDE文章点击图片自动进入下一页的方法,之前找了好多代码,发现都不太好用,今天找到这个代码,亲测可行,于是贴出来给大家分享一下:

修改/include/arc.archives.class.php文件

1、查找 “解析模板,对内容里的变动进行赋值” 在这段话上面添加以下代码。

function ClickPicNext($ismake=1,$aid,&$body)
{
global $cfg_rewrite;
if($this->NowPage!=$this->TotalPage)
{
$lPage=$this->NowPage+1;
if($ismake=0)
{
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU","点击图片,进入下一页<br/><a href='".$this->NameFirst."_".$lPage.".".$this->ShortName."'>"."\${0}"."</a>",$body);
}
else
{
//对于生成静态页面的情况下使用
$PageList="<a href='".$this->NameFirst."_".$lPage.".".$this->ShortName."'>"."\${0}"."</a>";
//对于动态页情况下使用,我这里用的是静态,于是将下面这行代码注释,如果您的是动态页面的话,则将上面那行代码注释,使用下面这行即可。
//$PageList="<a href='view.php?aid=$aid&pageno=$lPage'>"."\${0}"."</a>";
if($cfg_rewrite == 'Y')
{
$PageList = str_replace(".php?aid=","-",$PageList);
$PageList = preg_replace("/&pageno=(\d+)/i",'-\\1.html',$PageList);
}
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU",$PageList,$body);
}
}
else
{
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU",$this->GetPreNext('imgnext'),$body);
}
return $body;
}

2、查找“$this->Fields[$this->SplitPageField] = $this->SplitFields[$pageNo - 1];”,在这段代码下添加以下代码:

if($ClickPicNext){
$this->Fields[$this->SplitPageField]=$this->Fields[$this->SplitPageField];
}else{
$this->Fields[$this->SplitPageField]=$this->ClickPicNext($ismake,$this->Fields['id'],$this->Fields[$this->SplitPageField]);
}

3、查找“$this->PreNext['next'] = “下一篇:<a href=’$mlink’>{$nextRow['title']}</a> “;”在这段代码下添加以下代码:

$this->PreNext['imgnext'] ="<a href='$mlink'>"."\${0}"."</a>";

4、查找“$this->PreNext['next'] = “下一篇:没有了 “;”在这段代码下添加以下代码:

$this->PreNext['imgnext'] ="\${0}";

5、查找到以下代码:

else if($gtype=='next')
        {
            $rs =  $this->PreNext['next'];
        }

在其下面添加以下代码:

else if($gtype=='imgnext')
{
$rs = $this->PreNext['imgnext'];
}

然后保存。重新生成文章即可!

织梦DedeCMS删除所有栏目或文章后,新建ID不从1开始的解决方法

2011年11月7日 没有评论

这个修改方法很简单,从模板无忧那里找到的,只需要在后台系统-SQL命令行工具里面运行以下语句即可,不用采用笨方法重新安装织梦CMS了。

删除所有栏目,新建ID从1开始:

1
ALTER TABLE `dede_arctype` AUTO_INCREMENT =1;

删除所有文章,新发布文章ID从1开始:

1
ALTER TABLE `dede_archives` AUTO_INCREMENT =1;
分类: 聆听技术随笔 标签: ,

利用dedecms autoindex让文章列表加上序列号

2011年11月7日 没有评论

有些时候我们在制作模板的需要在文章标题前面加上序列号,可以通过织梦自带的autoindex属性来实现,实现方法很简单,只需要在序号递增的地方加上 这段代码就行,[field:global runphp='yes' name=autoindex][/field:global] ,完整代码如下。

可以通过 autoindex 属性实现更多高级的功能,大家可以搜索一下autoindex的用法了解更多。

<ul >
{dede:arclist row=’5′ titlelen=’30′ }
<li><em>[field:global runphp='yes' name=autoindex][/field:global]</em><a href=’[field:arcurl/]‘ title=”[field:fulltitle/]” >[field:title/]</a><cite>[field:pubdate function="MyDate('m-d',@me)"/]</cite></li>
{/dede:arclist}
</ul>

分类: 聆听技术随笔 标签: ,

Fatal error: Call to a member function read() 解决

2011年11月7日 没有评论

  Fatal error: Call to a member function read() on a non-object in C:\wamp\www\DedCms5.7\include\dialog\select_templets.php on line 71

  织梦官方帮助中心给出的答案是

  可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。

  建议这样:

  1、(网站路径) 这里面确定是否有中文,是否有空格,这两都都会影响;

  2、确定php.ini或php_admin_value 是否限制了目录

  3、确定是否支持dir函数

  4、dede不能装在虚拟目录

分类: 聆听技术随笔 标签: ,

织梦DedeCMS V5.7前台搜索打开慢的原因及解决方法

2011年11月7日 没有评论

  织梦DedeCMS V5.7前台搜索打开慢的原因及解决方法

  之前一直没有用织梦CMS V5.7的搜索功能,今天刚测试一下,发现搜索很忙,看到了华强的这篇文章,终于知道是什么情况,转载到博客。

  一、问题原因

  由于在织梦CMS V5.7版中,新增了利用“配置sphinx技术”(Sphinx技术百度百科解释:http://baike.baidu.com/view/807043.htm)的文档“全文检索”的功能,并且默认打开了此功能。

  而大多数的用户站点中,又没有配置或没有条件配置全文索引技术,这就造成了每次前台在搜索的时候都去连接Sphinx服务器,而这个服务器却又不存在。

  二、解决方法

  用超级管理员的身份登录网站后台,点击【系统】选项卡,进入“系统基本参数”页面,点击“其它选项”,找到“是否启用文章全文检索功能(需配置sphinx服务器):”项目,将其设置为“否”,保存即可。如下图:

  三、注意事项

  该设置是立即生效的,无需生成前台HTML页面,只是当遇到无效的时候,可以试着清理一下全站缓存!

用DedeCms搭建的网站应该如何防挂马?

2011年6月2日 没有评论

DedeCms做为国内使用最为广泛使用人数最多的CMS之一,经常爆出漏洞,每个漏洞的爆出,影响都是一大片,轻则被人挂广告、弹框,重则服务器成为肉机,宝贵数据丢失。那么有什么办法可以提高DedeCms的安全性呢?

先来看看原因吧,为什么PHP程序经常出漏洞,其实是由PHP程序本身决定的。PHP可复用性低,导致程序结构错综复杂,到处是冗余代码,这样不仅利于漏洞的产生,还影响漏洞的修得;PHP程序入门简单且普遍开源,导致很多人都可直接阅读代码,搜寻漏洞;这样便有源源不断的漏洞被发现、被修复、被发现……。而当前流行的PHP系统习惯用以文件形式做为缓存,这样就需要开放文件的写权限,这无疑成为PHP系统的软肋。目前针对PHP系统的攻击方式,除了已经很少出现的“注入”攻击外,大部分攻击都是通过系统的某个漏洞,向可写文件里插入一句话木马,以此方式获得shell。

网站安全从来都是服务器配置、文件权限控制和网站程序三者的相互配合,今天主要看看如果对DedeCms网站程序的改进来提高安全性。“可执行的文件不允许被修改,可写文件不允许被访问”这是网站权限控制的根本原则,网站程序在“可写文件不允许被访问”方面可做许多工作。就拿DedeCMS来说,我们可以在如下几个方式做好保护。

1、改名根目录下的data目录,或者移动到网站目录外面

data目录便是最藏污纳垢的地方,系统经常要往这个目录写数据,这个目录下的任何一个文件又都可以通过URL访问到,所以要让浏览器访问不到里面的文件,就需要将此目录改名,或者移动到网站的目录外面去。这些,即使别人通过漏洞往文件里写进了一句话木马,他也找不到此木马所在的文件路径,无法继续展开攻击。因为DedeCMS程序的不合理,导致改名data目录动作会比较大,具体做法如下:

a. 将公开的内容迁移到pub目录(或者其它自定义目录)下,如rss、sitemap、js、enum等,此步骤需要移动文件夹,并修改这些文件的生成路径

b. 修改引用程序目录

搜索替换“DEDEDATA.“/data/” 为 “DEDEDATA.”/”,大概替换五六十个地方;

搜索替换“DEDEDATA.‘/data/” 为 “DEDEDATA.’/”,大概替换五六十个地方;

搜索“/data/”,按具体情况,修改路径类似成为:“$DEDEDATA.“/”(注意include目录和后台管理目录都有data文件夹,不需要修改);

c. 修改data文件夹名称,并修改include/common.inc.php文件里的“DEDEDATA”的值,再在后台系统设置》参数设置里修改模板缓存目录,即可修改完成。以后也可以按照此步骤来更改data文件夹名称。

2、改名“dede”管理目录,并加固

如果把后台隐藏好了,即使别人获得了你的管理员账号、密码,他也无从登录。

a.在/dede/config.php里,找到如下行:

以下为引用的内容:

1 //检验用户登录状态
2 $cuserLogin = new userLogin();
3 if($cuserLogin->getUserID()==-1)
4 {
5     header(“location:login.php?gotopage=”.urlencode($dedeNowurl));
6 }

把上面代码,改为:

以下为引用的内容:

1 //检验用户登录状态
2 $cuserLogin = new userLogin();
3 if($cuserLogin->getUserID()==-1)
4 {
5     //header(“location:login.php?gotopage=”.urlencode($dedeNowurl));
6     header(“HTTP/1.0 404 Not Found”);
7     exit();
8 }

b.修改/dede/login.php的文件名称,并对应的修改/dede/templets/login.htm里的表单提交地址;

c.修改/dede/的目录名称;

这样,别人在没有登录前,只能访问/dede/login.php改名后的地址,访问其他地址均会获得404错误。

当然,做了安全加固后,以后DedeCMS的升级就会有一些麻烦。

dedeCMS采集规则过滤和替换文章内容部分的代码函数

2010年12月6日 没有评论

1.采集去除链接

{dede:trim}]*)>([^<]*){/dede:trim}
dedecms 去掉带超连接关键字
全部去
{dede:trim}^<a*’>*</a>${/dede:trim}

让field:title 标题突破30这个长度,修改代码的方法
找到./include/inc_arcpart_view.php
行291 :
if($titlelen==”") $titlelen = 30;
修改为
if($titlelen==”") $titlelen = 60;
就可以了,然后,你可以这样调用了
{dede:channelArtlist typeid=’0′ col=1 tablewidth=’100%’}
{dede:arclist row=”10″}
[field:title function="cn_substr('@me',38)" /]

{/dede:arclist}
{/dede:channelArtlist}

把这个延伸一下:关于inc_arcpart_view.php
function GetArcList($typeid=0,$row=10,$col=1,$titlelen=30,$infolen=160,
$imgwidth=120,$imgheight=90,$listtype=”all”,$orderby=”default”,$keyword=”",
$innertext=”",$tablewidth=”100″,$arcid=0,$idlist=”")
这里的参数都可以更改你实际需要的模板元素尺寸大小.

2. 采集过虑中去掉链接保留文字的方法!

柏老大的方法是{dede:trim}<a ([^>]*)>([^<]*)</a>{/dede:trim}
这样做会去掉<a hf…….>与</a>之间的字符!这样整个文章就少了部分字符,不完整了!

后来我多次测试,总算找到了正确的使用方法!如下:
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}

做成两条采集规则就可以了!
在实际使用中好像([^<]*)([^>]*)两条一起使用才行!

3. 过滤div
{dede:trim}]*)>{/dede:trim}
{dede:trim}
{/dede:trim}
过滤js
{dede:trim}]*)>([^<]*){/dede:trim}

过滤未知变量字符
固定(.*)固定

4.dede万能过滤代码

常用正则表达式:

([^]]*) 所有
\d 数字
[0-9] 0-9之间的数字
[A-Za-z] 字母
[a-z] 小写字母
[A-Z] 大写字母
(.*)\.(rar|zip|7zip|tgz) 压缩包文件
(.*)\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga) 图片文件
\d{6} 邮编
(13|15)[0-9]{9} 手机号码
\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9] E-mail地址
http[s]?:\/\/([\w-]+\.)+[\w-]+([\w-./?%&=]*)? URL地址

以下是常用的正则表达式标签
{dede:trim}<tbody(.*)>{/dede:trim}
{dede:trim}</tbody>{/dede:trim}
{dede:trim}<table(.*)>{/dede:trim}
{dede:trim}</table>{/dede:trim}
{dede:trim}<tr(.*)>{/dede:trim}
{dede:trim}</tr>{/dede:trim}
{dede:trim}<td(.*)>{/dede:trim}
{dede:trim}</td>{/dede:trim}
{dede:trim}<font(.*)>{/dede:trim}
{dede:trim}</font>{/dede:trim}
{dede:trim}<a(.*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
{dede:trim}<param(.*)>{/dede:trim}
{dede:trim}<embed(.*)</embed>{/dede:trim}
{dede:trim}<object(.*)</object>{/dede:trim}
{dede:trim}<iframe(.*)</iframe>{/dede:trim}
{dede:trim}<form(.*)</form>{/dede:trim}
{dede:trim}<input(.*)>{/dede:trim}
{dede:trim}<script(.*)</script>{/dede:trim}
{dede:trim}<style(.*)</style>{/dede:trim}
{dede:trim}<!–(.*)–>{/dede:trim}

以下为不常用的正则表达式标签

{dede:trim}<div(.*)>{/dede:trim}
{dede:trim}</div>{/dede:trim}
{dede:trim}<center(.*)>{/dede:trim}
{dede:trim}</center>{/dede:trim}
{dede:trim}<p(.*)>{/dede:trim}
{dede:trim}</p>{/dede:trim}
{dede:trim}<span(.*)>{dede:trim}
{dede:trim}</span>{dede:trim}
{dede:trim}<img(.*)>{/dede:trim}

5.织梦标题不全,鼠标指向显示全部的代码:
{dede:arclist titlelen=’100′}

[field:title function=' ( strlen("@me")>40 ? cn_substr("@me",40): "@me" ) '/]
{/dede:arclist}

6.dede/inc/inc_archives_functions.php第100行(flash频道远程flash本地化的BUG)
$cfg_uploaddir = $GLOBALS['media_dir'];
修改成
$cfg_uploaddir = $GLOBALS['cfg_other_medias'];

6.发布时间,来源,作者可以通过@me函数实现,如:在自定义处理接口:处输入   @me = “Azure·【博】” 就表示来源为“Azure·【博】”
7.内容的替换:在所采集的文章内容中有多媒体,使用的是相对路径,采集的时候又不想下载,最好的办法就是将地址替换成媒体的实际地址。可以这样实现,在文章内容规则部分的自定义处理接口:处输入@me=str_replace(‘src=”str1′,’src=”str2′,@me);
这样采集出来的文章中的所有的str1就被替换成str2!

比如:采集替换函数
@me=str_replace(‘舒格尔’,'www.shugeer.com’,@me);

再补充一点   过滤规则

{dede:trim replace=”"}<a([^>]*)>(.*)</a>{/dede:trim}
{dede:trim replace=”"}<script([^>]*)>(.*)</script>{/dede:trim}
{dede:trim replace=”"}<!–(.*)–>{/dede:trim}
{dede:trim replace=”"}<table([^>]*)>(.*)</table>{/dede:trim}
{dede:trim replace=”"}<object([^>]*)>(.*)</object>{/dede:trim}
{dede:trim replace=”"}<iframe([^>]*)>(.*)</iframe>{/dede:trim}
{dede:trim replace=”"}<strong>经典论坛交流</strong>:<br>{/dede:trim}
{dede:trim replace=”"}◎进入论坛、版块参加讨论,我还想。{/dede:trim}
{dede:trim replace=”"}责任编辑:{/dede:trim}
{dede:trim replace=”"}出处:{/dede:trim}
{dede:trim replace=”"}本文链接:{/dede:trim}
{dede:trim replace=”"}<span([^>]*)>(.*)</span>{/dede:trim}
这些是过滤的规则   下面是替换的规则

比如 要采集的文章里出现网址 www.shugeer.com     如果你想替换成 www.52listen.com   那替换这个网址的规则就是
{dede:trim replace=”www.52listen.com”}www.shugeer.com{/dede:trim}
这只是替换 的方法 替换文字也可以 什么都行   可以替换多个规则 

最后补充一点 采集页面   分页设置   可以选择

全部列出的分页列表     就是 在你选择的这一段代码里 所有的分页面地址全部采集
上下页形式或不完整的分页列表   上下形式的 和不太完整的 列表分页 可以选择这一个项目 

列表的采集 比如说   ]</a> [内容]下一页</a>   这样写     就是 在这里的这个列表地址会自动采集   当然 内容里 吧A 连接 给过滤了 就不会出现问题了