织梦生成栏目html无反应,排除法解决[织梦dedecms生成栏目没反应]问题 揪出罪魁祸首GetTopTypename()!...

好久没用织梦dedecms了,最近有帮客户制作一网站,客户原先程序就是dedecms,想调整网站结构以适应seo,且同时更改网站风格,需求既如此,那就在现有的dedecms网站基础上进行改版就好。

是否长久不用织梦的原因,在制作过程中,总会突然冒出一两个小问题,好在简单,一搜索,网上都有答案,不料,在更新栏目页时,却出现了一个较大的问题,就是生成栏目页时没有反应,像一条死狗一样,你怎么戳它,它都不会吭声。

f9f9dea153fb93da597a3873ee68bb29.png

这个问题很严重,如果不能解决的话,前边的工作就会全功尽弃!

是客户网站dedecms程序版本低的原因导致?

ac7cc223b81169ca1d4e74644a122d45.png

但几年前哥用的版本也差不多哎!

按网上的教程,见百度经验:dedecms织梦更新生成栏目没反应问题总汇,操作了一遍,发现还是没有解决。看来并不是版本低的原因。

重新把备份的客户网站dede后台目录再传至ftp进行全部覆盖,结果还是无反应。

那应该不是程序本身的问题了,试着去模板中找找原因吧。

那到底是程序问题还是模板的问题,也没有那么清楚,先做一个测试来判定。

在织梦dedecms后台把某栏目(使用频道模型)对应的频道模板换成default默认的路径(注:新制作的网站模板命名不叫default,默认的还在),发现可以生成。

41e685edd1d90ca74f4776371f94fd53.png

(注:上图,请将{style}换成default,进行测试后再换回来)

发现栏目能生成,只是因为使用了default默认模板,打开是一片杂乱。此外,哪怕是没有对应的模板文件,生成栏目时也会出现错误告知。

354507648cf368d25f02514cc0d2db04.png

那说明程序本身没有问题,这个锅不要让程序来背,判断是由于模板未知原因导致。

--------------------------

知道导致问题的关键所在后,就易寻找到答案,无非在模板中的代码。在百度知道这篇:dede后台更新栏目 点击开始生成html没反应为什么?说到把一个带有“GetTopTypename(@me)”的代码删除就好!那就去find GetTopTypename,发现,还真有。

于是将其注释掉,上传模板再去更新栏目,还是纹丝不动,没有一点反应。

7f9393ab1b3392245ce6852d6eea1393.png

来回几次折腾,发现一个问题:

就是dedecms的标签代码虽然把它注释了,可是它还会继续工作(你可以查看生成的网页文件源代码来观察),不像html那样,注释就不解析了。

于是直接删除带有GetTopTypename的标签代码,换成:{dede:field name='typename' /}

重新更新栏目,发现好了,可以生成,恢复正常。

25bf3c363233ca5c66baa8a53c6b5992.png

---------------------------------

但又发现一个问题。如图:

2953601bf3c6a50a068bc134cfcaf013.png

严格一点的话,这个显示有点儿不太符合逻辑啊!

后台的栏目结构是这样的。

0fb4e33587fec77b7191820e6916aa85.png

看来{dede:field name=’typename’ /}只能显示它自己的名字,不能显示上属层级的名称。

这就要重新审核GetTopTypename()的作用了。

GetTopTypename()作用就是获得子栏目的上层栏目的名称。给它一个栏目id,就能逆流而上,回溯去找这个id的上一级领导或上级领导的领导,直到找到一个为止。如下:

1.复制如下代码至include/common.func.php的最下方。

//获取顶级栏目名

function GetTopTypename($id)

{

global $dsql;

$row = $dsql->GetOne(“SELECT typename,topid FROM `#@__arctype` WHERE id= $id”);

if ($row[‘topid’] == ‘0’)

{

return $row[‘typename’];

}

else

{

$row1 = $dsql->GetOne(“SELECT typename FROM `#@__arctype` WHERE id= $row[topid]”);

return $row1[‘typename’];

}

}

2.上传至网站空间。

3.测试是否功能正常,且不影响其他功能使用。

要如何才能让GetTopTypename()生效而又不会造成栏目更新时无反应的问题,方法就是上述三步。

经过这一操作,客户网站的栏目层次逻辑结构显示得清楚明白。

2dca1f4a23c69fbfe8004a140527c14d.png

GetTopTypename()并不是dedecms自带的方法,如果没有预先定义这个GetTopTypename()功能函数,想发挥作用是不成的,反而会造成织梦dedecms生成栏目没反应的莫名问题——因为生成html页面的后台程序不能识别模板中的GetTopTypename(),不过,在你有需求的时候,GetTopTypename()能弥补dedecms自带功能的不足,发挥其”寻祖归宗”的作用。

是为记,以备用。dec0061967ccf3169c19d1fa0b875fc8.gif

本文链接:肖运华 » 网站策划设计制作优化 » 排除法解决[织梦dedecms生成栏目没反应]问题 揪出罪魁祸首GetTopTypename()!

转载请注明:http://www.xiaoyunhua.com/2075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值