dedecms中常见问题修改方法总结
2018-09-07 13:18
  新手常见问题,此贴是早些时候我发的,在3.1正式版中.有些问题已得到修正,不过仍可作为修改或学习参考 
请大家花点耐心看完这个吧,这些问题很多人都有碰到.何必要不停的发贴子问呢? 
另外,看完这个请去你自己的后台看完模板标记参考!!特别是arclist这个标记的参数说明!! 
多思考一下问题,多试验一下标记,,学到就是自己的,学不到,谁也帮不到你!! 
补充一点..很多标记都可以参考系统默认的模板和模板区的一些好模板,多看标记体会每个标记的用法, 
下文如果有您的贴子..感谢您对DEDE的匏礁冻?. 
3.1lit最新版当一级栏目为最终列表栏目时,使列表显示其下级栏目的文章的修改 
include/inc_arclist_view.php 
80行: 
$addSql.=And(typeid=.$this->TypeID.ortypeid2=.$this->TypeID.); 
更改为: 
//增加的,用来解决上级列表调用不出下级列表的问题 
$ssid=TypeGetSunID($this->TypeID,$this->dsql); 
$ssid2=str_replace(typeid,typeid2,$ssid); 
//结束增加的 
$addSql.=And(typeid=.$this->TypeID.or.$ssid.ortypeid2=.$this->TypeID.or.$ssid2.);//本句也已修改 
上面这部分用来解决分页问题 
include/inc/inc_fun_SpGetArcList.php 
70行开始: 
if($ridnum>1){ 
$tpsql=; 
for($i=0;$i<$ridnum;$i++){ 
if($tpsql==)$tpsql.=And(.TypeGetSunID($reids[$i],$dsql,arc); 
else$tpsql.=Or.TypeGetSunID($reids[$i],$dsql,arc); 
} 
$tpsql.=); 
$orwhere.=$tpsql; 
unset($tpsql); 
} 
else{ 
$orwhere.=And.TypeGetSunID($typeid,$dsql,arc); 
} 
更改为: 
if($ridnum>1){ 
$tpsql=; 
for($i=0;$i<$ridnum;$i++){ 
if($tpsql==){ 
//开始修改文章第二栏目调用问题 
$ssid=TypeGetSunID($reids[$i],$dsql,arc); 
$ssid2=str_replace(typeid,typeid2,$ssid); 
$tpsql.=And(.$ssid.or.$ssid2;} 
else{ 
$tpsql.=Or.TypeGetSunID($reids[$i],$dsql,arc); 
$tpsql.=str_replace(typeid,typeid2,$tpsql);} 
} 
$tpsql.=); 
$orwhere.=$tpsql; 
unset($tpsql); 
} 
else{ 
$ssid=TypeGetSunID($typeid,$dsql,arc); 
$ssid2=str_replace(typeid,typeid2,$ssid); 
$orwhere.=And(.$ssid.or.$ssid2.);//结束修改文章第二栏目调用问题 
} 
此部分用来解决调用下级栏目文章列表问题 
替换的代码我写的很粗糙,可以暂时先用着,等官方的解决方案出来后再替换 
在include/inc_arclist_view.php还要改一处: 
//获得一个单列的文档列表 
下 
//类别ID的条件 
$orwhere.=And(#@__archives.typeid=.$this->TypeID.or#@__archives.typeid2=.$this->TypeID.); 
改为: 
//类别ID的条件 
$ssid=TypeGetSunID($this->TypeID,$this->dsql); 
$orwhere.=And(#@__archives.typeid=.$this->TypeID.or.$ssid.or#@__archives.typeid2=.$this->TypeID.); 
否则有页面没有列表内容,因为80行是Selectcount(*)..... 
关于那个栏目路径有个{cmspath} 
首先说一下{cmspath}的意思,,打开后台系统配置参数可以看到第二项,DedeCms安装目录: 
这个就是{cmspath}所解析出来的路径, 
如果beta2升级到lit,需要手工修改栏目属性,把{cmspath}去除.或者你运行setup升级完之后用lit的所有文件 
替换掉之前的B2的所有文件,这样{cmspath}就可以正常解析成你的网站路径 
如果你不用{cmspath}这个参数,.可以照下面的修改 
执行SQL:updatedede_arctypesettypedir=replace(typeidr,{cmspath},); 
以去掉数据库的里{cmspath} 
然后修改文件catalog_add.php找到$true_typedir=str_replace({cmspath},$cfg_cmspath,$typedir); 
改成 
$true_typedir=str_replace(,$cfg_cmspath,$typedir); 
就行 
[field:description/]这个标签如何限制字数? 
[field:descriptionfunction=cn_substr(@me,80)/] 
dede里的所有标记都支持这样使用函数的 
关于3.1版友情链接添加后在首页没有显示的问题 
引起这个的主要原因是BLT在编写的时候把表dede_flink的ischeck的值弄反了造成的. 
在3.01里..ischeck=1表示首页链接..2表示内页链接,但3.1正好相反, 
给一个最简直的改法就是打开inc_fun_SpGetFriendLink.php 
找到第13行.. 
CODE: 
$wsql=whereischeck=1; 
[Copytoclipboard] 
将1改为2就行了. 
11.11更新过后,取消了inc_fun_SpGetFriendLink.php这个文件的调用. 
所以只须要打开inc_arcpart_view.php 
在410行附近 
CODE: 
$wsql=whereischeck=1; 
if($type==p_w_picpath)$wsql.=Andlogo<>; 
elseif($type==text)$wsql.=Andlogo=; 
else$wsql.=; 
[Copytoclipboard] 
同样将whereischeck=1改为2就可以 
3.1LIT版广告名称修改后无效的解决办法 
看4楼的回贴. 
dede新版如何去掉列表的文章摘要 
删除[field:info/] 
关于后台登陆验证码样式的修改 
当文章描述中出现的英文长度大于table的宽度时,会搞的很难看 
[field:textlink/] 
改为 
<ahref=[field:arcurl/]>[field:titlefunction=cn_substr(@me,30)/]</a> 
新建频道模型教程 
dedecms实现列表页双样式 
<tablewidth=100%> 
{dede:listtype=full} 
<tr> 
<tdclass=[field:IDfunction=MagicVar(arch2,arch2)/]><b>[field:typelink/][field:textlink/]</b>点击:[field:click/]([field:stime/])</td> 
</tr> 
{/dede:list} 
</table> 
我想实现一个功能,就是在文章列表中(模板list_article)如果文章有缩略图就显示缩略图,没有的话则直接显示文章列表而不显示“没有缩略图”的图片。 
dedecms的扩展是用function形式的,因为加入if这种结构太占用资源,如果你有必要,你可以这样: 
[field:picnamefunction=GetMyPic(@me)/] 
在inc_functions.php里定义一个函数 
functionGetMyPic($img) 
{ 
if($img==)return; 
elsereturn<imgsrc=$imgwidth=120height=100border=0>; 
} 
这样来处理 
这种做法可能会有点不便,但好处是既达到扩展目的,又不会占用太大资源,又不影响模板结构,实现真正的模板与代码分离 
点击图片进入下一页 
打开include/inc_archives_view.php 
大概在444行左右,找到 
$this->Fields[$this->SplitPageField]=$this->Fields[$this->SplitPageField]; 
注释掉,改为 
$this->Fields[$this->SplitPageField]=$this->ClickPicNext($this->Fields[$this->SplitPageField]); 
然后,最后加上函数,注意在最后一个括号里面! 
//把图片替换成链接 
//---------------------------- 
functionClickPicNext(&$body) 
{ 
if($this->NowPage!=$this->TotalPage){ 
$lPage=$this->NowPage+1; 
$body=preg_replace(/<(imgIMG)(.*)(srcSRC)=[\]{0,}((.*)>)/isU,<ahref=.$this->NameFirst._.$lPage...$this->ShortName.>.\${0}.</a>,$body); 
//$body=<ahref=.$this->NameFirst._.$lPage...$this->ShortName.>.$body.</a>; 
}else{ 
if($this->GetNext()){ 
$body=preg_replace(/<(imgIMG)(.*)(srcSRC)=[\]{0,}((.*)>)/isU,<ahref=.$this->GetNext().>.\${0}.</a>,$body); 
//$body=<ahref=.$this->GetNext().>.$body.</a>; 
} 
} 
return$body; 
} 
自动地把文章中的图片替换为下一页的链接,如果是最后一页,则为下一篇! 
注意:先要按下面的改法,把上一篇下一篇分开才行! 
[dede3.1][改法]上一篇下一篇分开调用,且限定文章所在栏目内而不是现在的全站。 
在文章列表中,有的标题被截断了,用什么样的代码可以让鼠标在上面的时候可以显示完整的文件名? 
{dede:arclistrow=16orderby=pubdatecol=1typeid=3} 
<li>·<ahref=[field:arcurl/]title=[field:title/]>[field:titlefunction=cn_substr(@me,30)/]</a></li> 
{/dede:arclist} 
怎么样在文章名前面显示所属的文章栏目? 
{dede:arclistrow=10orderby=pubdate} 
·[field:typelink/][field:textlink/]<br/> 
{/dede:arclist} 
生成的文章文件名能不能增加MD5加密 
自己改一下,这种属于典型的无聊需求吧 
include/inc_channel_unit_functions.php 
. 
[field:writer/]怎么没有用 
lit版inc_arcpart_view.php没有读取附加表 
修改include\inc\inc_fun_SpGetArcList.php第120行,在后面加arc.writer, 
当然你也可以加入你还想引入的附加表内容如: 
arc.writer,arc.source,arc.shorttitle, 
新安装的DEDECMS3.0.1,第一次登陆就说我密码错误! 
你要查一下是否有dede_admin这个表,如果有,看看有没有数据, 
如果用户名和密码没有不允许的符号的话, 
一般是服务器可能能无法完成安装的SQL导入才可能会提示用户名不存在 
手工加个用户就OK了. 
也可以在数据库中删除表dede_admin,然后重新安装即可 
关于listpage分页在生成会有表格的修改 
搜索 
//获取静态的分页列表 
在下面的几行可以看到分页的一些东东 
关于栏目多风格和系统底层模版的问题 
用arclist 
{dede:arclist 
typeid=row=col=titlelen= 
infolen=imgwidth=imgheight=listtype=orderby=keyword=} 
自定义样式模板(InnerText)//这里定义你显示的样式..不要修改底层模板了..免得你自己麻烦. 
{/dede:arclist} 
另外栏目的模板可以不使用系统默认的{style}/list_article.htm 
你可以手工指定栏目的封面模板或是列表模板嘛..列如:{style}/list_class1.htm 
{style}/list_class2.htm 
等.这样就可以多风格了嘛. 
用dedecms做小说站的思路 
1、新建两个模型 
book模型和章节模型 
2、重新写档案发布程序,关键把两个模型关联起来,而现在提供内容模型的cmsware和dede都是办不到的,而dede自建频道提供的档案发布程序项可以很好的利用。重新些这四个文件(两个界面和两个提交后处理的程序)即可。 
3、如果要做成起点中文网哪种模式,那就要在member目录下写关于投稿的程序,以及在plus里面写业务模式如计费、计点等功能的程序。 
其实,dede只是一个内容发布的框架,提供的后台工具只针对管理员而已,用户完全可以自我定制各种模型,不过要对dede熟悉一点而已。 
能写程序的不妨一试。 
为什么我的自定义标记总是被当做文本来输出 
标记里要加上ismake=yes属性 
对图片SEO的一些思考, 
<ahref=[field:arcurl/]><imgsrc=[field:picname/]alt=[field:title/]border=0width=imgwidthheight=imgheight></a> 
参考arclist标记的说明,, 
dede编辑器的问题..从WORD复制进去的错误 
复制后安工具栏上那个右下角有黄色T的粘贴按钮~~~移上去有提示的,无格式粘贴 
标签的定义放在什么地方的 
凡是include里的文件,有什么***view.php都是控制视图的 
关于自动分页的问题 
自动分页的大小为只能在2-5之前 
3就是每个分页为3K的意思。 
这个跟动易的不一样,动易的是字节,所以你可以写2000或则3000DEDE的是K所以,你只能写2或则3,我的错误在,我写成2000K!汗一个, 
这在DEDE里的意思是,一个分页允许到2M!自然不成功 
关于分页标题 
内容部分如下格式即可: 
分页标题1#e# 
第1页内容 
#p#分页标题2#e# 
第2页内容 
#p#分页标题3#e# 
第3页内容 
#p#分页标题4#e# 
第4页内容 
。 
。 
。 
。 
。 
。 
附加选项:下载远程图片和资源怎么关闭啊??? 
dede/article_add.php和article_edit.php中找到(如果是其他的模型找到对应的添加和修改文件) 
<tdwidth=90>附加选项:</td> 
<td><inputname=remotetype=checkboxclass=npid=remotevalue=1checked> 
下载远程图片和资源 
把value改成0删除checked 
3.1B2///channelArtlist和arclist的BUG暂时解决方案 
修正所有栏目列表都一样和channelArtlist下arclist标签无法自定义 
打开include/inc_arcpart_view.php 
在207行找到 
else$typeid=0; 
然后把他删掉 
--------------------- 
再打开include/inc/inc_fun_SpGetChannelList.php 
在第66行找到 
$ctag->GetAtt(innertext) 
改为 
$ctag->GetInnerText() 
即可。 
如果有问题的,也可以加群:18176791 
呵呵.能看到这里.说明你是真心做站!祝你成功!! 
上一篇:PHP5的XML新特性
下一篇:PHP实现的链式队列结构示例