帝国 CMS 8.0 自带了 JS 调用登录模板(loginjs.php),很多网站都会用它来显示顶部登录状态。不过,在调用会员头像时,不少站长会直接拼接头像路径,例如:
这种写法仅适用于 JPG 格式头像,当会员上传 PNG、GIF、WEBP 等格式头像时,就会出现头像无法显示的问题。因此,建议使用帝国 CMS 官方提供的头像函数进行调用。
一、loginjs.php 已经查询了 upic 字段
打开:
/e/member/login/loginjs.php
可以看到系统已经查询了会员头像类型字段:
$r=$empire->fetch1("select ". eReturnSelectMemberF('userid,username,groupid,userfen,money,userdate,havemsg,checked,isot,phno,upic') ." from ".eReturnMemberTable()."..."); 其中:
- $r['userid']:会员 ID
- $r['upic']:头像图片类型
因此,可以直接调用官方函数:
<?=eMember_UpicReturnUrl($r['userid'],$r['upic'],1)?>
二、不要使用 [!--userpic--] 模板变量
很多人会尝试这样写:
实际上,这是错误的。
原因:
/c/ecachetemp/emtemp/esp_loginjs.php 是一个 PHP 文件,并不是帝国 CMS 的模板解析文件,因此不会自动解析:
[!--userpic--]
页面最终输出的内容仍然会是:
浏览器自然无法找到对应的图片地址。
三、正确写法
由于 esp_loginjs.php 本身就是 PHP 文件,因此可以直接调用 PHP 代码:
这样无需新增任何模板变量,也无需修改模板解析程序。
四、完整示例
document.write("
\" onerror=\"this.src='/e/data/images/nouserpic.gif';\" alt=\"<?=$myusername?>\"> <?=$myusername?> "); 五、为什么不能直接拼接头像路径?
例如:
/d/file/efupic/000/00/00/[!--userid--].jpg
这种方式存在以下问题:
- 仅支持 JPG 格式头像。
- PNG、GIF、WEBP 等格式全部无法显示。
- 如果以后帝国 CMS 修改头像存储规则,还需要手动修改代码。
而官方函数会根据会员的 upic 字段自动生成正确的头像地址,因此兼容所有系统支持的图片格式。
六、推荐写法
在 JS 登录模板中,建议统一使用:
<?=eMember_UpicReturnUrl($r['userid'],$r['upic'],1)?>
这样可以自动支持:
- JPG
- GIF
- PNG
- BMP
- JPEG
- WEBP
同时,当头像文件不存在时,会自动返回系统默认头像,避免页面出现图片裂图或 404 错误,是帝国 CMS 8.0 调用会员头像最推荐的方式。
