DEDE免登陆接口 For DEDE_v5.X,实现自动登陆,永不过期

这个功能是从以前发布的DEDE预发布http://www.4wei.cn/archives/444)程序中剥离出来的。可以实现用火车采集器发布时,不需要登陆DEDE后台,特别适合无人值守发布更新。

本方法适用于DEDE所有模型和模块,所有发布模块仅需要添加一处配置参数即可。

实现步骤如下:

  1. 取消DEDE未登陆时出现的登陆提示
  2. 自动登陆DEDE

修改一处DEDE的代码,为DEDE程序管理员目录的config.php,默认路径为dede/config.php,代码如下:

//检验用户登录状态
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
    header("location:login.php?gotopage=".urlencode($dedeNowurl));
    exit();
}

这段代码的作用是如果未检测到用户的登陆信息,就引导用户进入登陆过程,修改如下:

 //检验用户登录状态
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
    if($my_u != ''){
        $res = $cuserLogin->checkUser($my_u, $my_p);
        if($res==1) $cuserLogin->keepUser();
 }
    if($cuserLogin->getUserID()==-1)
    {
        header("location:login.php?gotopage=".urlencode($dedeNowurl));
        exit();
    }
}

这段代码的作用是在检测到用户未登陆时,尝试使用页面传递过来的参数进行登陆,如果登陆成功,则保存用户的信息并进行其它操作;如果登陆失败,就引导用户进入登陆页面。

这段代码修改完成,接下来要修改火车采集器的发布模块了。

尘缘做过的火车采集器的发布模块可以在这里下载:

  1. V5.7所有发布模块
  2. V5.6/V5.3等所有发布模块

修改发布模块,只需要在发布模块中添加登陆的用户名和密码信息,修改如图:

PS:这段时间刚刚搬了新服务器,欢迎各位同志与交换友情链接哈。http://www.4wei.cn/aboutme/links

DEDEV5.7为什么不升级版本号为V6

国内稍稍知名一点的CMS都MVC了,DEDE最后也MVC了,我是喜,但也替人忧呐。

入门级的程序员和站长都喜欢用DEDE,图个简单好用,开发起来也方便。

MVC有一定的上手难度,看看PHPCMS2008及后续版本就知道,解决不了的问题太多,用不起呀。

DEDE也MVC了,我觉得不是好事,一大批入门级用户肯定蒙了。

我是因为DEDE不是MVC才转向PHPCMS的,现在发现DEDE也MVC了,额,搞得人不知道该用哪套程序了。

所以我是喜,但也替人忧呐。替DEDE忧,替DEDE的用户忧。搞不好DEDEV5.6系还得升级个两年。

对了,DEDEV5.7为什么不升级版本号为V6?

实现DEDE网站数据快速迁移、数据库备份和还原

近日要帮客户实现网站改版,又要用到数据库的备份和还原。我发现一些用户对数据库备份和还原并不熟悉,所以结合本次案例做一次完整的笔记,希望对大家有用。

一般的用户会安装PHPmyadmin或者帝国还原工具,安装这些软件的过程本身就很复杂,然后加上数据库的备份和下载还原,很多用户会比较头痛。

DEDE本身自带了不错的备份和还原功能,以下我就使用DEDE的备份和还原来快速实现数据库的备份和还原,最终达到快速方便的网站迁移。

注:以下办法适用于DEDE V5.3/5.5/5.6,dede为默认管理后台目录

第一步:备份数据。

登陆原网站后台,系统-数据库备份/还原,使用数据库备份功能,将网站数据库备份到data目录下。

第二步:FTP下载整个网站。

这一步非常简单,如果是虚拟主机,并能整站打包,可以使用打包下载;如果是独立服务器器,可以直接打包后下载,当然,你也可以使用FTP挨个下载。

第三步:建立数据库,配置数据库连接。

DEDE的数据库配置在data/common.inc.php中,请根据购买的数据库填写具体信息,修改主机名和用户信息,保存。如果是独立服务器,请手工建立数据库。 继续阅读实现DEDE网站数据快速迁移、数据库备份和还原

DEDE实现表单(模型)分步提交【完成】

一般的企业会遇到各类用户调查,我此前也用DEDE的自定义表单和模型,完成了一些诸如报名等系统的开发。

现在遇到一个用户需求,即,要求将一个表单(或者模型,以下统称表单)分成多步提交实现,以解决部分问卷内容过多,以减轻用户因内容繁杂产生的压力。

此功能,我想通过DEDE的自定义表单或者模型实现,再配合DEDE的管理权限分组,实现多用户分级控制用户问卷内容,如果可能,再增加图表输出的功能。

这里有一些技术难题,想跟各位大虾分请教下。

1,实现字段分步显示并实现分步提交数据的缓存,目前考虑通过$_SESSION或者文本储存;
2,实现用户重复提交控制;
3,实现分字段筛选的功能。

这里,分步显示字段的功能,有难度,欢迎各位大虾探讨。

续:
上述功能已经完成,整个项目开发周期3个工作日,目前已运用到新东方的学员问诊项目中。

功能如下:

  1. 通过DEDE自定义模型可以自由创建字段
  2. DEDE模型管理,可以定义字段显示顺序,可以定义字段分步显示
  3. 模型中添加的联动字段,可以定义显示方式,默认为Select,可以显示为checkbox和radio
  4. 增加表单变量控制,用户提交申请控制
  5. 后台管理列表增加按字段筛选的功能

效果预览如下:

总结:DEDE的模型二次开发非常方便,至少上手非常容易,适合小型企业开发;不足之外在于代码重复率高,如果能融入部分MVC开发思想就太好了。目前,这方面DEDE已经走在PHPCMS后面了,希望DEDE能速度跟上。

让DEDE的文章和列表使用二级域名,实现千万级子站点

突发奇想,额,算了,还是招了吧。这个功能其实早就有了,有人做过了,也有客户联系开发这个功能。

让DEDE的文章和列表使用二级域名,据说这样的SEO效果比较好。这里的比较好,并不是一定说文章收录得就多,就快,而是说权重可能会高一点,收录稳定一点。

但有朋友说,这样的效果做出来,收录会慢一些。

1,要求IIS支持rewrite或者Apache支持mod_rewrite
2,没有独立服务器则要求支持.htaccess
3,一个能做泛解析的域名

第一步,将咱的域名泛解析过来,就是*.4wei.cn解析到..8.8.8,这个过程太复杂

接下来做第二步,将.htaccss上传到网站根目录,实现二级域名的转发,并禁止人访问以前的html页面,因为相同的内容可能会造成被K的杯具。 继续阅读让DEDE的文章和列表使用二级域名,实现千万级子站点

DEDE,给文章中的标题加上链接

DEDE能给文章中的关键字加上链接,同理,也可以自动给文章中其它文章的标题加上链接,今天就来实现这个功能。

实现的思路和过程如下:

  1. 将所有文章的标题和链接地址缓存到临时表或者缓存文件
  2. 这里的文章链接地址可以是动态也可以静态,但生成静态链接则要消耗更多资源

我这里采用了静态地址+文件缓存的办法,在一键更新网站的过程中,按需要增加一步缓存过程,将所有文章的标题和链接缓存处理,然后调用替换过程。

本实例为客户定制开发代码,故不能完整提供程序代码,仅供有动手能力的朋友参考。 继续阅读DEDE,给文章中的标题加上链接

DEDE实现后台禁用登陆验证码

程序版本:DEDE V5.5系列版本
修改文件:dede/login.php; dede/templets/login.htm

适用范围:火车采集器实现DEDE经典登陆的解决方案

解决步骤如下:

  1. 系统基本参数-添加新变量-添加一个后台验证码选项:
    变量名称:    cfg_validate
    变量类型:     布尔(Y/N)
    参数说明:     是否显示后台验证码
    变量值:      Y
    所属组:    其它选项
  2. 修改dede/login.php,行44-45左右,修改添加判断过程 继续阅读DEDE实现后台禁用登陆验证码

DEDE获取当前栏目及所有子栏目的文章数量

因DEDEV5起,加强了对SQL注入和安全的检查,导致无法查询一些正常的子查询的SQL。
以下代码用来解决查询当前栏目及当前栏目下所有子栏目的文章总数,添加到/include/common.func.php
或者
/include/extend.func.php中,然后在模板中调用getTotalArcByTid(1)。

/*
 * 返回符合记录的文章数量
 * @description DEDE不允许执行子查询,解决栏目下文章统计的问题
 * @param $level 为真时查询所有子类目
 * */
function getTotalArcByTid($tid, $level=TRUE) {
 global $dsql;
 
 $level==TRUE && $tid = GetSonTypeID($tid);
 $sql = "SELECT count(id) as total from `#@__archives` where typeid in($tid)";
 $result = $dsql->GetOne($sql);
 return $result['total'];
}

/*
 * 递归获取符合条件的子栏目
 * @param $tid 栏目ID
 * @return string
 * */
function GetSonTypeID($tid)
{
 global $dsql;
 $dsql->SetQuery("Select id From `#@__arctype` where reid in($tid) And ishidden<>1 order by sortrank");
 $dsql->Execute($tid);

 $typeid = '';
 while($row=$dsql->GetObject($tid))
 {
  $typeid .= "{$row->id},";
  $typeid .= GetSonTypeID($row->id);
 }
 
 return trim($typeid,',');
}

DEDEcms使用SQL获得当天已审核的文章总数

24小时发布的新文章:
86400 是 3600 * 24,就是24小时发布的新文章。

select count(id)+0 as total from dede_archives where UNIX_TIMESTAMP() - pubdate < 86400 and arcrank >0;

任意日期发布的最新文章:

SELECT count(ID) as count from dede_archives where pubdate > UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00'))  limit 1;

任意日期审核通过的最新文章

SELECT count(ID) as count from dede_archives where pubdate > UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00')) and arcrank >  limit 1;

获取当日的零时时间:

FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00')

获取当时零时时间戳:

UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00'))

当天发布的最新文章:

SELECT count(ID) as count from dede_archives where to_days(curdate())=to_days(from_unixtime(pubdate))  limit 1;

这里使用 to_days(curdate())=to_days(from_unixtime(pubdate)),使用起来比较方便,资源占用也少,在只查询当天的文档时,推荐使用。

DEDECMS"模板文件不存在,无法解析文档"的终极解决办法。

首先说明,这个问题并不一定是模板真的不存在,相信很多朋友也会很郁闷,搞得一点自信都没有了。

我来说一下如何解决这个问题。

简单来说,模板文件不存在,无法解析文档这个问题可能是由于系统安装在二级目录,在填写二级目录里出现错误,找不到模板。
解决办法是:到系统设置-核心设置-DedeCms安装目录 设置正确的路径,如果是根目录安装,则不需要填写任何内容。根目录安装切记留为空。

然后呢,比较有用的办法就是,更新系统缓存,乱七八糟的全更新一下,一般的问题全能搞定。

如果不行,那你的问题就是和我一样,再往下看。

我的问题比较奇怪,不知道你们的情况是怎么样的。我的解决办法是,在哪里出现错误,就去哪里找错误。 继续阅读DEDECMS"模板文件不存在,无法解析文档"的终极解决办法。

织梦淘宝客合作版 V_1_1 无法添加栏目的解决办法

今日正在测试centos 下的MYSQL环境,装上织梦淘宝客合作版后测试,发现无法添加栏目,提示错误为“保存目录数据时失败,请检查你的输入资料是否存在问题!”。

于是跟踪调试,发现是一句SQL的问题。

以下是解决办法。

如果你已经安装好了,请到系统后台执行以下SQL:

ALTER TABLE #@__arctype ADD COLUMN `seotitle` varchar(80) NOT NULL DEFAULT ''

如果系统后台权限不够,可以到PHPMYADMIN或者MYSQL中直接运行:

ALTER TABLE dede_arctype ADD COLUMN `seotitle` varchar(80) NOT NULL DEFAULT ''

如果你还未安装,恩恩,好像就不会遇到这个问题了。

DEDCMS V5.3/V5.5 修改默认图片上传路径的解决办法

所有的配置文件均在 include/common.inc.php 文件中。

//模板的存放目录
$cfg_templets_dir = $cfg_cmspath.'/templets';
$cfg_templeturl = $cfg_mainsite.$cfg_templets_dir;

//cms安装目录的网址
$cfg_cmsurl = $cfg_mainsite.$cfg_cmspath;

//插件目录,这个目录是用于存放计数器、投票、评论等程序的必要动态程序
$cfg_plus_dir = $cfg_cmspath.'/plus';
$cfg_phpurl = $cfg_mainsite.$cfg_plus_dir;

$cfg_data_dir = $cfg_cmspath.'/data';
$cfg_dataurl = $cfg_mainsite.$cfg_data_dir;

//会员目录
$cfg_member_dir = $cfg_cmspath.'/member';
$cfg_memberurl = $cfg_mainsite.$cfg_member_dir;

//专题列表的存放路径
$cfg_special = $cfg_cmspath.'/special';
$cfg_specialurl = $cfg_mainsite.$cfg_special;

//附件目录
$cfg_medias_dir = $cfg_cmspath.$cfg_medias_dir;
$cfg_mediasurl = $cfg_mainsite.$cfg_medias_dir;

//上传的普通图片的路径,建议按默认
$cfg_image_dir = $cfg_medias_dir.'/allimg';

//上传的缩略图
$ddcfg_image_dir = $cfg_medias_dir.'/litimg';

//用户投稿图片存放目录
$cfg_user_dir = $cfg_medias_dir.'/userup';

//上传的软件目录
$cfg_soft_dir = $cfg_medias_dir.'/soft';

//上传的多媒体文件目录
$cfg_other_medias = $cfg_medias_dir.'/media';

根据需要修改相关参数即可。
图片/上传文件默认路径请在系统后台-系统基本参数-站点设置选项卡里设置

DedeTag Engine Create File False的原因及解决办法

版本:DEDE所有版本,DEDE_v5,V5.3,V5.5
原因:要创建的目录或者文件没有写入权限

解决办法:

第一步,定位出错的文件,即查找生成什么文件时出的问题。

方法:修改 include/dedetag.class.php文件,搜索DedeTag Engine Create File False,会找到以下代码

$fp = @fopen($filename,"w") or die("DedeTag Engine Create File False");

修改成

$fp = @fopen($filename,"w") or die("DedeTag Engine Create File False : $filename");

重新生成栏目或者文档时,即可提示当前文件信息。

第二步,找到提示错误的目录或者文件,检查是否有写入权限,windows服务器请给予写入权限,linux服务器请给予777权限。如果目录或者文件不存在,请手工建立。

常见的错误情况有,data目录没有写入权限,html静态文件目录没有写入权限,index.html首页静态文件没有写入权限。

警告:此修改操作可能会暴露程序目录结构信息,建议解决问题以后,还原程序文件。

DEDE防采集之Js分页链接的实现

DEDE防采集的一点猜想 中,说了几点关于DEDE防采集的想法。其中有一条是Js加密分页链接的办法。

昨天晚上把DEDE的静态分类转换成了Js版本,从而实现了基本的分页加密方法。

Js分页也很简单,可以直接通过DEDE模板输出文档当前的ID,分页总数和当前分页编号。使用这些参数可以构造出和DEDE一样的分页链接来。

这种办法可以防止大多数程序的采集,特别是直接基于获取分页链接的采集办法。 继续阅读DEDE防采集之Js分页链接的实现