IPS论坛后台仪表盘参数错误及银行现金统计异常求助
问题1:ArgumentCountError 参数数量不匹配
问题原因
报错显示调用IPS\Theme\class_game_front_admincp::dashboard()时传入9个参数,但方法要求10个。排查后可能是以下情况:
- 对应模板文件中
admincp的dashboard方法仅定义了9个参数,和调用时传递的10个参数不匹配 - 某个
Dashboard_Count_*统计方法未正确返回值(比如抛出异常提前终止),导致实际传递的有效参数不足10个
修复步骤
- 找到
admincp模板文件(通常路径为applications/game/admincp/templates/admincp.php),查看dashboard方法定义,确保它接受10个参数,且参数顺序和_dashboard()中传递的$Count_Characters到$Count_MoneyBank一致 - 检查所有
Dashboard_Count_*方法的返回逻辑,确保每个方法都能正常返回数值 - 若模板方法确实只需要9个参数,调整
_dashboard()中的调用代码移除多余参数;若模板方法需要10个参数,确认每个传递的变量都有有效值
问题2:银行现金统计数值错误
问题原因
Dashboard_Count_MoneyBank()方法中使用count(char_bankcash),这是统计表中char_bankcash字段非空的记录行数,而非所有记录的现金总和。当前显示的6$实际是有6条非空银行现金记录,不是总金额。
修复步骤
将方法中的count改为sum,修改后代码如下:
public function Dashboard_Count_MoneyBank() { try { // 替换count为sum,计算所有char_bankcash的总和 $result = \IPS\Db::i()->select( 'sum(`char_bankcash`)', 'ipb_characters')->first(); // 处理无记录时总和为null的情况 $result = $result ?: 0; } catch( \UnderflowException $e ) { \IPS\Output::i()->error( 'no_module_permission', '2C122/1', 403, '' ); } return $result; }
修改后该方法会返回所有用户银行现金的总和,显示结果将与数据库实际总金额一致。
内容的提问来源于stack exchange,提问作者PolishDywan
相关产品推荐
相关产品推荐

