升级模块后,某个管理员打开商品列表只剩标题和Loading,其他账号完全正常。清Magento缓存、重建索引都没用,换无痕窗口登录同一账号仍然空白。最后查到ui_bookmark里保存了旧列名和已经删除的filter,UI组件初始化时JavaScript报错,数据请求甚至没有发出。
先判断是账号数据还是浏览器数据
- 同一账号换浏览器仍异常:优先查ui_bookmark数据库记录
- 另一个账号在同一浏览器正常:不是公共静态资源问题
- 只有当前浏览器异常:再查localStorage、sessionStorage和缓存
- Network有mui/index/render 500:查后端数据源;完全没有请求:查前端初始化
查看控制台和数据请求
控制台常见错误包括找不到column provider、filter组件undefined或bookmark JSON解析失败。Network中找到mui/index/render请求后保存参数namespace,后面查询Bookmark要用。
SELECT bookmark_id,user_id,namespace,identifier,current,config FROM ui_bookmark WHERE user_id=ADMIN_USER_ID AND namespace='product_listing';
namespace以实际请求为准,不同自定义Grid名称不同。先备份config JSON,检查columns、filters、sorting里是否引用已删除字段。
最小影响的恢复方法
如果只影响一个管理员和一个Grid,可以删除该user_id + namespace下的个人bookmark,让Magento下次打开时生成默认布局。删除属于数据库维护操作,先导出对应行并安排在受控窗口。
-- 备份后再执行 DELETE FROM ui_bookmark WHERE user_id=ADMIN_USER_ID AND namespace='product_listing';
若identifier有default、current等多条,只删某一条可能仍被另一条覆盖。先理解current字段和config内容,再决定清理范围。不要TRUNCATE ui_bookmark,这会重置所有管理员的个性化视图。
模块升级为什么会触发
UI Component XML删除或改名了列,但老用户Bookmark仍保存旧配置。扩展升级脚本应迁移或清理自己namespace下不兼容字段,至少在发行说明里提醒。更稳的是保持列名兼容,只改变label和实现。
修复后验证
- 受影响账号重新打开Grid能加载默认列
- 重新设置列显隐、筛选和排序,刷新后能保存
- 其他管理员的Bookmark没有变化
- mui/index/render返回200且响应时间正常
- 浏览器控制台没有provider或component错误
“只影响一个管理员”是很强的线索。全站缓存和索引通常不会按管理员账号选择性损坏。

