有资源网yoqq.cn
 
 
查看: 57|回复: 0

Discuz x3.x触屏手机版文章链接伪静态调用解决方法

[复制链接]
有资源网yoqq.cn

144

主题

161

帖子

739

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
739
发表于 2019-5-18 20:28:59 | 显示全部楼层 |阅读模式
最近在使用Discuz x3搭建网站,在PC版页面调用文章、帖子的时候,已经遇到了类似的问题,在discuz后台设置了伪静态,但是前端页面显示的依然是动态链接。在PC版页面Discuz diy模块只能调用动态链接,不能调用伪静态链接的解决方法请参考文章:《discuz x3后台模块管理数据调用文章帖子链接显示动态不是伪静态解决方法》、《discuz DIY模块文章、帖子链接不调用伪静态链接,只显示动态链接解决方法》。

现在使用Discuz X3触屏手机版在首页、栏目页、文章页调用文章链接,还是调用的动态的文章链接。这的解决方法和PC版Discuz diy模块调用动态链接解决方法不一样。

首先看下,discuz伪静态设置的规则:

4步discuz伪静态设置


在经过1、2、3、4步的discuz文章伪静态设置之后,将“查看当前的 Rewrite 规则”(我使用的是Linux Nginx服务器,所以选择Nginx Web Server伪静态规则。)

可以说这里的规则是因为有的人PC版[url=https://www.yoqq.cn/thread-75-1-1.html]discuz伪静态
都还没设置好,就像而Discuz手机版需要自己动手改源码中的函数才能调用文章伪静态链接。

接下来就看看Discuz触屏手机版文章伪静态源码修改方法:

找到/source/function/function_portal.php文件,使用编辑器打开function_portal.php并搜索fetch_article_url,会在大概53行找到fetch_article_url函数如下:
然后整个复制在下方新建一个方法名字改掉
//原fetch_article_url函数如下
function fetch_article_url($article) {
        global $_G;
        if(!empty($_G['setting']['makehtml']['flag']) && $article && $article['htmlmade']) {
                if(empty($_G['cache']['portalcategory'])) {
                        loadcache('portalcategory');
                }
                $caturl = '';
                if(!empty($_G['cache']['portalcategory'][$article['catid']])) {
                        $topid = $_G['cache']['portalcategory'][$article['catid']]['topid'];
                        $caturl = $_G['cache']['portalcategory'][$topid]['domain'] ? $_G['cache']['portalcategory'][$topid]['caturl'] : '';
                }
                return $caturl.$article['htmldir'].$article['htmlname'].'.'.$_G['setting']['makehtml']['extendname'];
        }else {
                return 'portal.php?mod=view&aid='.$article['aid'];
        }
}

将上述fetch_article_url函数修改如下:
//修改后的fetch_article_url函数如下
function fetch_article_url($article) {
        global $_G;
        if(!empty($_G['setting']['makehtml']['flag']) && $article && $article['htmlmade']) {
                if(empty($_G['cache']['portalcategory'])) {
                        loadcache('portalcategory');
                }
                $caturl = '';
                if(!empty($_G['cache']['portalcategory'][$article['catid']])) {
                        $topid = $_G['cache']['portalcategory'][$article['catid']]['topid'];
                        $caturl = $_G['cache']['portalcategory'][$topid]['domain'] ? $_G['cache']['portalcategory'][$topid]['caturl'] : '';
                }
                return $caturl.$article['htmldir'].$article['htmlname'].'.'.$_G['setting']['makehtml']['extendname'];
        } elseif($_G['setting']['rewriterule']['portal_article'] == "{id}.html"){//判断是否为设置的伪静态{id}.html,避免手机端首页模块数据调用、栏目页、文章页调用动态链接
                return $article['aid'].".html";
        } else {
                return 'portal.php?mod=view&aid='.$article['aid'];
        }
}


红色部分是新增的PHP代码,关键点是:在discz后台->seo设置->URL伪静态中,已经将门户文章页设置为“{id}.html”,这fetch_article_url函数里判断当$_G['setting']['rewriterule']['portal_article']设置的是{id}.html规则返回的伪静态链接是$article['aid'].".html"。

在discuz后台更新缓存、Discuz模块调用缓存后,在discuz手机版的首页、栏目页、文章页查看文章链接已经是伪静态链接了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表