何让dedecms实现shtml
让dedecms实现shtml包含,这个是十分简单,也是十分轻松的一个问题。我们可以通过对dedecms的二次开发,实现对dedecms顶部导航,中间部分,右边公共部分,以及底部
推荐学习:织梦cms
让dedecms实现shtml包含,这个是十分简单,也是十分轻松的一个问题。我们可以通过对dedecms的二次开发,实现对dedecms顶部导航,中间部分,右边公共部分,以及底部,都有一个很好的支持,从而减少html生成的时候频繁的消耗系统资源去生成dedecms的html功能。这样可以加快dedecms生成html的速度。
首先我们要实现一个对dedecms栏目右边实现shtml包含。有关dedecms配置shtml环境,上篇文章都讲述过了。
1:首先建立右边公共模板templates/default/right.htm
2:编写以下标签
代码如下:
function lib_shtml(&$ctag,&$refObj)
{
if(isset($_GET['tid'])){
return file_get_contents('../data/'.$refObj->Fields['id'].'right.htm');
}else{
return '<!--#include virtual="'.$GLOBALS['cfg_cmspath'].'/data/'.$refObj->Fields['id'].'right.htm"-->';
}
}
3:生成栏目的时候,生成对应栏目的右边。
arc.listview.class.php
代码如下:
var $tcp1;
var $tcp3;</p> <p> $this->tcp1 = new DedeTagParse();
$this->tcp1->SetRefObj($this);
$this->tcp1->SetNameSpace("dede", "{", "}");
加载right.htm模板
$this->tcp1->LoadTemplate($GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/right.htm");
生成html
$file = $this->Fields['id'].'right.htm';
$rightfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_cmspath']."/data/".$file;
if(!file_exists($rightfile)){
$this->tcp1->SaveTo($rightfile);
}else{
if((time()-filectime($rightfile))>3600){
$this->tcp1->SaveTo($rightfile);
}
}
给模板赋值
MakeOneTag($this->tcp1,$this);
4:模板中直接调用{dede:shtml/}
后台生成,就完成了让dedecms实现shtml包含.
以上就是如何让dedecms实现shtml的详细内容,更多请关注下载我资源网( www.xiazaiwo.net)其它相关文章!
昨天飒飒在使用织梦(Dedecms)采集侠时,在定向采集文章URL设置过程中遇到了不少问题,虽然有官方演示做参照,但是亦不觉得全面,导致经常会采集失败。下面飒飒来给大家例举一些官方文档没有详细明说的定向采集文章URL设置。
官方文档给出的列表URL设置方法如下:
例:
比如我要采集站长之家优化栏目里面的文章,他们的文章URL是
http://www.xxx.com/web/2013/0988/215508.shtml
http://www.xxx.com/web/2013/0988/215505.shtml
http://www.xxx.com/web/2013/0988/215594.shtml
通配后的URL就是:http://www.xxx.com/web/(*)/(*)/(*).shtml
但是大多数时候我们会设置成:
http://www.xxx.com/web/2013/0988/215(*).shtml或
http://www.xxx.com/web/2013/0988/(*).shtml或
http://www.xxx.com/web/2013/(*)/(*).shtml或
http://www.xxx.com/web/(*)/0988/(*).shtml
虽然以上的通配URL也能实现采集,但是不是完整的通配。
小技巧:以后在设置列表URL时,遇见数字的全部采用通配符,准没错!
以下来说说官方文档未列出但又常见的URL:
例1:
http://news.xxx.cn/cs/2016-11-17/11252550.html
http://news.xxx.cn/cs/2016-11-17/11252538.html
http://news.xxx.cn/cs/2016-11-17/11252516.html
这样的文章链接该如何写通配URL呢?想必有不少小伙伴会如下写:
http://news.xxx.cn/cs/(*)/(*).html
但是采集测试时,会告诉你采集失败,说明通配URL错误,那该如何设置呢?
正确设置方法:http://news.xxx.cn/cs/(*)-(*)-(*)/(*).html
例2:
http://www.xxx.com/?p=5122
http://www.xxx.com/?p=5123
这是动态页面,没有生成伪静态或静态URL,也同样可以使用通配规则吗?
飒飒在此将结果告诉你:可以使用通配规则
正确设置方法:http://www.xxx.com/?p=(*)
TIPS:当然,必须补充一点,不是所有文章URL设置正确之后就可以采集,采集器都是有限制的,比如那个网站设置了防采集功能,无论你在采集设置上面做多少努力,都是徒劳,所以,在设置采集时,先测试,很重要!一些大站或者牛逼的网站一般都有防采集设置!
总结
1.当设置文章通配URL时,如遇到非数字的,一律不能用通配符(*),必须保留,方可正确采集。URL中常见的非数据有英文字母,-,_,?等。
2.URL通配规则一定要写全,写完后注意检查通配URL中是否含有数字,如含有,则通配URL为完成,将数字修改成通配符之后再保存采集,在将来对方网站修改URL命名时,方能以不变应万变。屏蔽你采集IP除外。
以上就是飒飒整理的织梦(Dedecms)采集侠定向采集文章URL设置大全,希望小伙伴和飒飒一起完善采集设置,让那么困难采集不再难!
member 会员文件夹整个删除
special 专题文件夹整个删除
install 安装文件夹整个删除
robots.txt 文件删除
删除 /templets/default 官方默认模板这个文件夹(在你自己有模板的情况下,如果没有,请勿删除)
删除PLUS文件夹除下列文件外的所有文件,保留下面几个文件。
/plus/img (文件夹)
/plus/count.php
/plus/diy.php
/plus/list.php
/plus/search.php
/plus/view.php
打开 /include/dialog/select_soft_post.php 搜索
$fullfilename = $cfg_basedir.$activepath.'/'.$filename;
在它上面加入
if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) {
ShowMsg("你指定的文件名被系统禁止!",'javascript:;');
exit();
}
打开 /dede/media_add.php 找到(dede是你网站管理后台目录名称)
$fullfilename = $cfg_basedir.$filename;
在它上面加入
if (preg_match('#.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))){
ShowMsg("你指定的文件名被系统禁止!",'java script:;');
exit();
}
打开/dede/config.php
搜索
if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){
大约在67行,把它替换为
if(!isset($token) || strcasecmp($token, $_SESSION['token']) !== 0){
apache环境
<rule name="Block data" stopProcessing="true">
<match url="^data/(.*).php$" />
<conditions logicalGrouping="MatchAny">
<add input="{USER_AGENT}" pattern="data" />
<add input="{REMOTE_ADDR}" pattern="" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Block templets" stopProcessing="true">
<match url="^templets/(.*).php$" />
<conditions logicalGrouping="MatchAny">
<add input="{USER_AGENT}" pattern="templets" />
<add input="{REMOTE_ADDR}" pattern="" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Block SomeRobot" stopProcessing="true">
<match url="^uploads/(.*).php$" />
<conditions logicalGrouping="MatchAny">
<add input="{USER_AGENT}" pattern="SomeRobot" />
<add input="{REMOTE_ADDR}" pattern="" />
</conditions>
<action type="AbortRequest" />
</rule>
iis环境
location ~* /(a|data|templets|uploads|images)/(.*).(php)$ {
return 403;
}
Nginx环境
这段配置代码一定要放在 location ~ .php(.*)$ 的前面才可以生效,配置完后记得重启Nginx生效。
location ~* /(a|data|templets|uploads|images)/(.*).(php)$ {
return 403;
}
宝塔面板在配置文件里面。加在红框上面即可。如下图
给所有站加上的话。请打开下面路径,根据你的PHP版本找到相应的文件。我这里是5.4版本的。
在最上面添加上面代码,然后重启服务。亲测有效。
检测设置成功的方法,新建一个随意内容的php文件放到a|data|templets|uploads任意文件夹,如果访问出现4.3错误,说明设置正常。如果显示你刚才设置的内容,刚是失败。按步骤好好检测一下看看是不是设置错误。
location /data {
rewrite ^/data\/(.*)$ /404.html;
}
这样,访问DATA的文件全都会提示404错误。亲测有效!
我们可以关闭这个生成这个文件
方法:
打开 /include/dedesql.class.php 找到
//保存MySql错误日志
$fp = @fopen($errorTrackFile, 'a');
@fwrite($fp, '<'.'?php exit();'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
@fclose($fp);
这几行删除就行了,如果你的 data 文件夹里面有 mysql_error_trace.inc 文件,记得删除它。
同理我们还可以设置禁止访问
location /plus {
rewrite ^/plus\/(\w+)\.php(.*)$ /404.html;
}
location /templets {
rewrite ^/templets/(.*)/(.*).htm$ /404.html;
}
location /uploads {
rewrite ^/uploads\/(\w+)\.php(.*)$ /404.html;
}
等目录
*请认真填写需求信息,我们会在24小时内与您取得联系。