因为要添加一些自定义常量进数据库,方便后台设置,但发现后台设置的面包屑导航控制常量却依然失效未按预期执行。检查breadcrumb class代码没有问题,数据库configuration正常,最后从脚本 init_db_config_read.php 直接打印常量值也没有任何问题,这就奇怪了,其他常量设置都很正常地在跑。百思不解时突然想到可能 breadcrumb 类先于数据库常量加载,并且只有这一个可能,用 die() 检查这两个文件执行顺序发现果然如此,难怪后台设置不起作用。打开 includes/auto_loaders/config.core.php ,可以看到各种 class 的初始化是排第一位的,然后才是其他预加载操作。
#70
$autoLoadConfig[0][] = array('autoType'=>'class',
'loadFile'=>'breadcrumb.php');
#106
$autoLoadConfig[40][] = array('autoType'=>'init_script',
'loadFile'=> 'init_db_config_read.php');
解决:设置 breadcrumb 加载顺序在 init_db_config_read 之后即可,即改下标 0 大于 40 如 50:
#70
$autoLoadConfig[50][] = array('autoType'=>'class',
'loadFile'=>'breadcrumb.php');
这种情况可能还会出现于其他情况,应该算是zen cart的一个小小的bug吧。