DiscuzX 3.X门户专题列表模板不生效解决方法

discuzwrer.jpg

Your request has encountered a problem.

Error messages:

  • 模版文件未找到或者无法访问:

  • ./template/default/forum/weitie_forumdisplay.htm

出现问题的原因:

在管理后台界面切换风格,或者编辑风格的匹配模板后,做了所有更新缓存的操作后模板还是没有生效,是因为Discuz把模板信息写在了数据库里。

解决方法:

打开数据库,找到表pre_portal_category,其中primaltplname字段和articleprimaltplname字段为模板路径

1.primaltplname字段修改为你正在用的路径

默认模板,如果你的文章列表和频道列表打不开提示路径错误或者模板文件不存在可以换成默认的即可

./template/default:portal/list

或者是

./template/default:portal/list_category_onerank

/default是默认路径,可以修改为你当前使用模板的路径 

如:./template/mytheme:portal/list

2.articleprimaltplname字段,修改方法同上

./template/default:portal/view

/default是默认路径,可以修改为你当前模板的路径 

如:./template/mytheme:portal/view

这个字段触发更新的机制暂时没找到规律,所以直接进数据库手动修改就可以了,然后更新下缓存即可。

以上方法如果还不行

修改文件 source\admincp\admincp_portalcategory.php  1025行  

函数 remakediytemplate添加一句红色的代码! 

代码中只检查数据库中是否存在 目标模板栏目和 模板目录, 不判断我改变了模板名称。如果你修改的模板是一个目录下的,始终都不会更新'common_diy_data'数据表。以至于你修改不生效! 除非你修改的模板是两个不同的目录的!
具体原因自己看代码理解。

这应该是个BUG!
function remakediytemplate($primaltplname, $targettplname, $diytplname, $olddirectory){
           global $_G;
           if(empty($targettplname)) return false;
           $tpldirectory = '';
            if(strpos($primaltplname, ':') !== false) {
                      list($tpldirectory, $primaltplname) = explode(':', $primaltplname);
           }
           $tpldirectory = ($tpldirectory ? $tpldirectory : $_G['cache']['style_default']['tpldir']);
           $newdiydata = C::t('common_diy_data')->fetch($targettplname, $tpldirectory);
           if($newdiydata) {
                      if($newdiydata['primaltplname'] == $primaltplname) return false;
           }
           $diydata = C::t('common_diy_data')->fetch($targettplname, $olddirectory);
           $diycontent = empty($diydata['diycontent']) ? '' : $diydata['diycontent'];