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

最近在使用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版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手机版的首页、栏目页、文章页查看文章链接已经是伪静态链接了。



标签: discuz discuz门户栏目伪静态