PHPCMS 多站点管理切换问题

本文介绍了如何修正获取站点ID的函数,以便实现在后台管理多个站点时能实时获取当前站点ID。同时,解决了多站点前台首页不支持动态加载的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开系统函数库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;
}

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

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

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

   问题位置 : \phpcms\modules\content\index.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=? 才能让首页动态显示 你们不觉得这是很大的问题吗   

 

转载于:https://www.cnblogs.com/qhorse/p/4810409.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值