前一段时间使用织梦系统做javabus后,一直没有往这个系统里发文章,而是一直在javabus论坛里上传java以及JAVA相关的视频教程,这几天用采集功能采集了少量文章,而且也把论坛里的视频教程转发到这个系统上了.
在这里也AD一下,如果你也是JAVA的初学者,相信这些经过我精挑细选的JAVA相关的视频教程对你很有帮助哦.你可以到论坛里去观看,论坛观看地址:http://www.javabus.cn/bbs/index.asp?boardid=10&topicmode=2. 网站观看地址:http://www.javabus.cn/html/OnLineShow/JavaMoving/index.html.
回到主题,当网站有了点文章后,就想将长文章分页,好在后台有这么个批量管理的功能提供了自动分页的功能.不过,一用才发现,有BUG,不能正常使用这个自动分页的功能,报错如下:
Unknown column 'ID' in 'where clause' - Execute Query False! Select count(*) as dd From dede_addonarticle where ID>0 limit 0,1;
一看就知道是SQL语句里有问题,错误原因应该是没有ID这个字段.开始想想,应该不会是这么简单的BUG吧,IT柏拉图不至于犯这种小错误吧.(呵呵,不自信的表现,其实,结果还真就是这么回事).于是到QQ群里问了问,没多少人说话,不过还是肥龙龙回答了下,不过,他说的原因和我想的一样简单.之后我再问了些话,他就没再回答了,也许这样的问题已经有人问过太多次了吧,烦了.呵呵.
管他是不是IT柏拉图的不小心还是其它意外,动手改一下就可以证实到底怎么回事了.
在那个功能执行区点右键,查看网页地址,如下:http://www.javabus.cn/dede/article_description_action.php?channel=1&dsize=250&table=dede_addonarticle&field=body&msize=512&pagesize=100&sid=&eid=&dojob=page&Submit=%BF%AA%CA%BC%D6%B4%D0%D0%B7%D6%CE%F6.
OK,找到article_description_action.php文件,开始修改源码.在源码里查找出错时提示的这行SQL代码,晕,没找到,放大范围试试,搜索Select count(*) as dd From dede_addonarticle,还是没找到,妈的,见鬼了,再放大范围,搜索Select count(*) as dd,好了,找到几个地方.其实,不用查找,因为源码很少,就140多行代码,直接看一下,就可以看到注释里有
//--------------------------
//获取自动摘要
//--------------------------
和
//----------------------------
//更新自动分页
//----------------------------
在这里找一下就可以看到如下代码
//----------------------------
//更新自动分页
//----------------------------
if($dojob=='page'){
require_once(dirname(__FILE__)."/inc/inc_archives_functions.php");
//统计记录总数
if($totalnum==0){
$addquery = " where ID>0 ";
if($sid!=0) $addquery = " And ID>='$sid' ";
if($eid!=0) $addquery = " And ID<='$eid' ";
$row = $dsql->GetOne("Select count(*) as dd From $table $addquery");
$totalnum = $row['dd'];
}
//获取记录,并分析
if($totalnum > $startdd+$pagesize) $limitSql = " limit $startdd,$pagesize";
else if(($totalnum-$startdd)>0) $limitSql = " limit $startdd,".($totalnum - $startdd);
else $limitSql = "";
$tjnum = $startdd;
if($limitSql!=""){
$addquery = " where ID>0 ";
if($sid!=0) $addquery = " And ID>='$sid' ";
if($eid!=0) $addquery = " And ID<='$eid' ";
$fquery = "Select aid,$field From $table $addquery $limitSql ;";
$dsql->SetQuery($fquery);
$dsql->Execute();
while($row=$dsql->GetArray())
{
$tjnum++;
$body = $row[$field];
$aid = $row['aid'];
if(strlen($body) < $msize) continue;
if(!preg_match("/#p#/iU",$body)){
$body = SpLongBody($body,$cfg_arcautosp_size*1024,"#p#分页标题#e#");
$body = addslashes($body);
$dsql->ExecuteNoneQuery("Update $table set $field='$body' where aid='$aid' ; ");
}
}
}//end if limit
在上一篇文章::手动使用SQL语句删除织梦DEDECMS系统中文章内容为空以及字数少于X时的文章 里提到了如何查看表结构,并且也说明了DEDE_CMS的文章是分两个表来储存的,所以我们知道,文章内容是存放在dede_addonarticle表里的,而系统的这个自动分页是如何实现的呢?其实就是更新这个表的body字段,自动在这个字段里要分页的地方(通过系统设置的分页字数来确定位置)加上分页符号就OK了,这种方法很简单哦,呵呵,没看源码以前,还以为他是分页后分别将各页存储为一条新记录,再通过外键来连接呢,这样就比较麻烦了.
通过查看源码,发现了罪魁祸首"ID",我们通过查看dede_addonarticle这个表,发现,根本没有ID这个字段,所以,不报错才怪呢.dede_addonarticle这个表里只有aid,相信这个ID原本应该就是aid,把上面的那段代码里的ID都改成aid.好了,保存,上传到服务器,试一下吧.已经可以了.如果你是不会改,那就复制以下代码覆盖上面那些代码
//----------------------------
//更新自动分页
//----------------------------
if($dojob=='page'){
require_once(dirname(__FILE__)."/inc/inc_archives_functions.php");
//统计记录总数
if($totalnum==0){
$addquery = " where aID>0 ";
if($sid!=0) $addquery = " And aID>='$sid' ";
if($eid!=0) $addquery = " And aID<='$eid' ";
$row = $dsql->GetOne("Select count(*) as dd From $table $addquery");
$totalnum = $row['dd'];
}
//获取记录,并分析
if($totalnum > $startdd+$pagesize) $limitSql = " limit $startdd,$pagesize";
else if(($totalnum-$startdd)>0) $limitSql = " limit $startdd,".($totalnum - $startdd);
else $limitSql = "";
$tjnum = $startdd;
if($limitSql!=""){
$addquery = " where aID>0 ";
if($sid!=0) $addquery = " And aID>='$sid' ";
if($eid!=0) $addquery = " And aID<='$eid' ";
$fquery = "Select aid,$field From $table $addquery $limitSql ;";
$dsql->SetQuery($fquery);
$dsql->Execute();
while($row=$dsql->GetArray())
{
$tjnum++;
$body = $row[$field];
$aid = $row['aid'];
if(strlen($body) < $msize) continue;
if(!preg_match("/#p#/iU",$body)){
$body = SpLongBody($body,$cfg_arcautosp_size*1024,"#p#分页标题#e#");
$body = addslashes($body);
$dsql->ExecuteNoneQuery("Update $table set $field='$body' where aid='$aid' ; ");
}
}
}//end if limit
问题解决,收功.如果上面的方法还不行,那你可要先检查一下看你的是哪个版本的哦,如果版本不对,自然会有差别的.我使用的是:织梦DEDECMS(版本名称:DedeCms OX 版本号:4_0RC1 ),
原创作品,转载请注明:转载自:巴士飞扬-专业技术BLOG(www.busfly.cn)
Tags: 织梦dede-CMS
原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/
本文链接地址:http://www.busfly.net/csdn/post/17.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~
巴士飞扬 于 2007-10-10 8:43:08 回复直接在过滤中填入(1)这样不行吗?
你能发你的后台和密码给我看一下吗?
或者把那个文章的地址发给我,我去试一下.
我QQ:81734107
巴士.飞扬 于 2007-10-2 22:17:29 回复我现在是在外面玩,过了10.1你再联系我,我再帮你看看吧
巴士.飞扬 于 2007-10-2 22:16:24 回复呵呵,相互学习嘛