zoukankan      html  css  js  c++  java
  • PHPCMS 多站点管理切换问题

    打开系统函数库global.func.php
    
    可以看到获取站点ID的函数如下
    /**
    * 获取当前的站点ID
    */
    function get_siteid() {
            static $siteid;
            if (!empty($siteid)) return $siteid;
            if (defined('IN_ADMIN')) {
                    if ($d = param::get_cookie('siteid')) {
                            $siteid = $d;
                    } else {
                            return '';
                    }
            } else {
                    $data = getcache('sitelist', 'commons');
                    if(!is_array($data)) return '1';
                    $site_url = SITE_PROTOCOL.SITE_URL;
                    foreach ($data as $v) {
                            if ($v['url'] == $site_url.'/') $siteid = $v['siteid'];
                    }
            }
            if (empty($siteid)) $siteid = 1;
            return $siteid;
    }
    
    
    

       在此函数中,站点ID是静态的值,而且第一句就是判断当前站点是否已经设置, 如果已经设置过,那返回的永远是第一次获取时的值, 这样的结果当然不可能实时变更当前站点!

       在前台的时候这样没有影响.但如果是在后台,管理多个站点的时候, 那就出问题了!

       解决办法是 把 if (!empty($siteid)) return $siteid; 这一句移到判断非后台的时候才直接返回

    /**
    * 获取当前的站点ID
    */
    function get_siteid() {
            static $siteid;
            if (defined('IN_ADMIN')) {
                    if ($d = param::get_cookie('siteid')) {
                            $siteid = $d;
                    } else {
                            return '';
                    }
            } else {
                   if (!empty($siteid)) return $siteid;
                    $data = getcache('sitelist', 'commons');
                    if(!is_array($data)) return '1';
                    $site_url = SITE_PROTOCOL.SITE_URL;
                    foreach ($data as $v) {
                            if ($v['url'] == $site_url.'/') $siteid = $v['siteid'];
                    }
            }
            if (empty($siteid)) $siteid = 1;
            return $siteid;
    }
    
    
    

       这样小改动一下,即可实现后台实时获取当前站点.

       另外,多站点前台也有问题,

       前台动态首页完全不支持多站点

       问题位置 : phpcmsmodulescontentindex.php 第16行开始

          if(isset($_GET['siteid'])) {
                            $siteid = intval($_GET['siteid']);
                    } else {
                            $siteid = 1;
                    }
    
     
     如果要支持多站点 这里应该是改为
      if(isset($_GET['siteid'])) {
                            $siteid = intval($_GET['siteid']);
                    } else {
                            $siteid = get_siteid();
                    } 
     当然.通过修改路由规则也能让这里正确的支持. 但这里用的是 GET变量,也就是说,除了第一个站点的域名是正常的外. 
    所有的站点的首页路径都需要变成 XXX.com
    /siteid=? 才能让首页动态显示 你们不觉得这是很大的问题吗   
  • 相关阅读:
    关于JQ中,新生成的节点on绑定事件失效的解决
    免费获取SSL证书/一键安装SSL证书/https加密
    在github上面创建新的分支
    github-新建文件夹
    如何删除github上的某个文件夹
    FTP连接虚拟主机响应220 Welcome to www.net.cn FTP service. (解决的一个问题)
    两种方法上传本地文件到github(转)
    Windows下如何将一个文件夹通过Git上传到GitHub上(转)
    利用Github免费搭建个人主页(转)
    关于阿里ICON矢量图(SVG)上传问题.
  • 原文地址:https://www.cnblogs.com/qhorse/p/4810409.html
Copyright © 2011-2022 走看看