OpenCart安装Journal 3模板出现uksort、未定义$loader报错如何解决?
报错原因与修复方案
报错原因
uksort()废弃警告:PHP 8.0及以上版本修改了排序函数的返回值要求,比较函数仅支持返回负整数、0、正整数三种结果,返回布尔值的旧写法会触发废弃提醒。你使用的Journal3版本未适配PHP8+,parser.php第297行的uksort回调函数依然返回布尔比较结果,所以触发该警告。- 未定义变量
$loader错误:导入演示站点后,Journal3的扩展修改覆盖了OcStore原生Twig模板加载逻辑,但系统缓存的修改文件没有同步更新,导致$loader变量未被初始化就被调用,触发报错。
修复方案
修复uksort警告
- 定位到文件
/home/l/lllci/optovik/public_html/system/library/journal3/options/parser.php,找到第297行的uksort相关代码 - 原代码的回调函数大概率是类似如下返回布尔值的写法:
uksort($options, function($a, $b) { return $a['sort'] > $b['sort']; });
- 将比较逻辑替换为太空船运算符写法,符合PHP8+的要求:
uksort($options, function($a, $b) { // 升序排序用如下写法,降序则换成 $b['sort'] <=> $a['sort'] return $a['sort'] <=> $b['sort']; });
修复未定义$loader错误
- 优先清除系统缓存:登录OcStore后台,点击右上角开发者设置按钮,选择清除全部修改缓存、Twig模板缓存即可。
- 若无法登录后台,手动删除
/home/l/lllci/optovik/public_html/system/storage/modification/目录下除index.html外的所有文件与文件夹,系统会自动重新生成正确的修改文件。
临时兼容方案
如果不想修改代码,可将站点PHP版本降级到7.4,两个报错会自动消失。
内容的提问来源于stack exchange,提问作者Gybernaty
相关产品推荐
相关产品推荐

