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

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

[复制链接]
  • TA的每日心情
    奋斗
    昨天 06:53
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    2120

    主题

    2167

    帖子

    4587

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    4587
    发表于 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版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手机版的首页、栏目页、文章页查看文章链接已经是伪静态链接了。

    有资源网- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与有资源网立场无关。
    2、本站所有主题由该帖子作者发表,该帖子作者有资源网享有帖子相关版权。
    3、有资源网管理员和版主有权不事先通知发贴者而删除本文。
    4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者 有资源网的同意。
    有资源网www.yoqq.cn(免费资源网)
    快抖影视网www.yoof.cc(最新在线电影)
    绿帽子站长导航网www.lmz8.com(免费提交站长收录外链)
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

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