升级模块后,某个管理员打开商品列表只剩标题和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错误
“只影响一个管理员”是很强的线索。全站缓存和索引通常不会按管理员账号选择性损坏。