25
2019
03

discuz x3实现伪静态的方法教程

discuz官方虽然自带伪静态设置 但还是有些地方做的并不完善,今天就教大家几个常用的解决方法。

一、discuz x3论坛首页“最后发表”帖子链接静态化 

现在还没有找到完美的解决方法,不过通过这样做还是基本实现我想要的形式,有两种方法,各有各的不足。 

方法1、把  /source/module/forum/ 下的forum_redirect.php 

dheader(‘Location: forum.php?mod=viewthread&tid=’.$_G['tid'].$pageadd.’#lastpost’);

换成

header("HTTP/1.1 301 Moved Permanently"); 

dheader(‘Location:thread-’.$_G['tid'].’-’.$page.’-1.html#lastpost’);

虽然首页显示是动态地址,但是点击就会301跳转到静态页,这个方法是定死的,取消了伪静态设置还是会跳转到这个伪静态地址,所以一定开启了伪静态而且必须是系统默认的方式,才可以这样修改。

方法2、这个方法是直接修改模板discuz.htm中的 

forum.php?mod=redirect&tid=$forum[lastpost][tid]&goto=lastpost#lastpost

换成 

forum.php?mod=viewthread&tid=$forum[lastpost][tid]

一共有三处这个方法可是完美支持自动判断网站是伪静态还是动态,不足之处是点击不会跳转到最后回复的帖子,只会跳转到最后回复的主题。 

二、discuz X3“上一主题、下一主题”链接静态化 

利用$_G[tid]-1 和 $_G[tid]+1 来做连接 打开viewthread.htm文件 

查找 

<a href="forum.php?mod=redirect&goto=nextoldset&tid=$_G[tid]" title="{lang last_thread}"><img src="{IMGDIR}/thread-prev.png" alt="{lang last_thread}" class="vm" /></a> 

<a href="forum.php?mod=redirect&goto=nextnewset&tid=$_G[tid]" title="{lang next_thread}"><img src="{IMGDIR}/thread-next.png" alt="{lang next_thread}" class="vm" /></a>

改为

<!–{eval $up_thread=$_G[tid]-1;$down_thread=$_G[tid]+1;}–> 

<a href="thread-$up_thread-1-1.html" rel="nofollow" title="{lang last_thread}"><img src="{IMGDIR}/thread-prev.png" alt="{lang last_thread}" class="vm" /></a> 

<a href="thread-$down_thread-1-1.html" rel="nofollow" title="{lang next_thread}"><img src="{IMGDIR}/thread-next.png" alt="{lang next_thread}" class="vm" /></a>

注意:用这种方法如果主题被删除就找不到了。(但是已经能完全实现伪静态了)

三、Discuz X3.0论坛帖“复制链接”伪静态实现方法 

打开 /template/default/forum/viewthread.htm 在大约200行左右找到以下代码: 

forum.php?mod=viewthread&tid=$_G[tid]$fromuid

换成 

forum.php?mod=viewthread&tid=$_G[tid]

就可以了。

四、discuz X3帖子列表页默认打开修改为新窗口打开 

discuz X3帖子列表默认打开是本窗口打开的,不符合用户使用习惯,最正规的修改如下面两个步骤: 

1: 根目录/static/js/forum.js 

找到 atarget函数 

改成 

function atarget(obj) { 

obj.target = getcookie(‘atarget’) ?  ”: ‘_blank’; 

}

2:把‘打开新窗口’改成‘本窗口打开’ 修改如下: 

根目录/template/default/forum/forumdisplay_list.html文件中: 

找到 

<span id="atarget" {if !empty($_G['cookie']['atarget'])}onclick="setatarget(0)" class="y atarget_1"{else}onclick="setatarget(1)" class="y"{/if} title="{lang new_window_thread}">{lang new_window}</span>

用下边的替换即可 

<span id="atarget" {if !empty($_G['cookie']['atarget'])}onclick="setatarget(0)" class="y atarget_1"{else}onclick="setatarget(1)" class="y"{/if} title="本窗口打开帖子">本窗口</span>

五、discuz x3 rss输出链接的静态化

rss的地址不能自动判断网站设置的是静态还是动态,一律会输出动态的样式,那对于开启了伪静态的朋友来说是个很不好的地方,如何将rss输出结果变成静态化呢?

下面是具体修改步骤: 打开source/module/forum/forum_rss.php 

1、论坛首页URL标准化:(如果不需要标准的人不用修改 )

<link>{$_G[siteurl]}forum.php</link>

换成

<link>{$_G[siteurl]}</link>

2、主题列表页URL伪静态:把 

<link>{$_G[siteurl]}forum.php?mod=forumdisplay&fid=$rssfid</link>

改为 

<link>$_G[siteurl]forum-$forum[fid]-1.html</link>

3、帖子内容页URL伪静态:把 

<link>$_G[siteurl]forum.php?mod=viewthread&tid=$thread[tid]</link>

改为 

<link>$_G[siteurl]thread-$thread[tid]-1-1.html</link>

六、discuz X3 帖子链接统一(帖子链接唯一化) 

开启了伪静态的帖子链接是这样的形式:thread-x-y-z.html,其中x是帖子的id(固定不变的),y是帖子的页数(也是固定的),z是帖子所在列表页的页数(这个是变化的,随着帖子回复或者新帖的加入,所处位置就会变化),如何让z不变呢,可能通过修改template/default/forum/forumdisplay_list.htm解决,修改后虽然帖子的url统一了,但是在帖子页里点击“返回列表”,返回的是列表第一页而不是帖子所在的列表页。 

找到 

<a href="forum.php?mod=viewthread&tid=$thread[tid]&{if $_G['gp_archiveid']}archiveid={$_G['gp_archiveid']}&{/if}extra=$extra"$thread[highlight]{if $thread['isgroup'] == 1 || $thread['forumstick']} target="_blank"{else} onclick="atarget(this)"{/if} class="xst" >$thread[subject]</a>

修改为 

<a href="forum.php?mod=viewthread&tid=$thread[tid]" $thread[highlight]{if $thread['isgroup'] == 1} target="_blank"{/if} onclick="atarget(this)" class="xst">$thread[subject]</a>

最后就是后台开启伪静态 设置规则  这些都默认设置就好了 这点这里 我就不说了 相信大家都知道了

注意 如果你在后台设置的时候修改了规则属性那么你修改过的地方也设置成相应的就行了。

原文链接:https://www.qiquanji.com/post/6980.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。