广

织梦CMS

  • 帝国CMS
  • 织梦CMS
  • PHP CMS
  • ECSHOP
  • WordPress
  • Discuz
  • DESTOON
  • 位置:首页 > CMS技巧 > 织梦CMS

    排除法解决[织梦dedecms生成栏目没反应]问题

    2020-03-20 19:00:14 次阅读 稿源:Z1T1

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

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

    dedecms生成栏目页时没有反应

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

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

    dedecms程序版本低

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

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

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

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

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

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

    频道模板设置

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

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

    织梦栏目生成错误信息

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

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

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

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

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

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

    于是直接删除带有GetTopTypename的标签代码,换成:

    {dede:field name='typename' /}

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

    织梦dedecms更新栏目正常

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

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

    织梦栏目逻辑不对

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

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

    织梦dedecms栏目结构

    看来{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()生效而又不会造成栏目更新时无反应的问题,方法就是上述三步。

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

    网站的栏目层次逻辑结构

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

    是为记,以备用。

    Z1T1部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与 Z1T1进行文章共享合作。