如何在Pimcore中为可翻译字段标签仅指定语种添加星标
解决方案
你可以直接通过覆写扩展pimcore.object.helpers.edit.getRecursiveLayout方法实现需求,不需要改动Pimcore核心源码,扩展逻辑写在你的自定义插件里即可:
pimcore.registerNS('pimcore.test.plugin'); pimcore.test.plugin = Class.create(pimcore.plugin.admin, { getClassName: function () { return 'pimcore.test.plugin'; }, pimcoreReady: function (params,broker) { // 覆写原生布局渲染逻辑 const originalGetRecursiveLayout = pimcore.object.helpers.edit.getRecursiveLayout; pimcore.object.helpers.edit.getRecursiveLayout = function (l, noteditable, context, skipLayoutChildren, onlyLayoutChildren, dataProvider, disableLazyRendering) { // 先执行原生逻辑 const layout = originalGetRecursiveLayout.apply(this, arguments); // 自定义逻辑:仅为德语的指定字段加星号 // 这里判断条件根据你的需求调整:比如类是Product,字段是你要设必填的字段,当前语种是德语 const targetClass = 'Product'; const mandatoryDeFields = ['name', 'description']; // 替换为你需要德语必填的字段名 const currentContext = context || {}; if (currentContext.object?.data?.general?.o_className === targetClass && currentContext.language === 'de' // 德语的语言code,根据你的实际配置调整 && mandatoryDeFields.includes(l.name) && !l.mandatory // 避免全局必填的字段重复加星号 ) { l.title += ' <span style="color:red;">*</span>'; } return layout; }; }, initialize: function () { pimcore.plugin.broker.registerPlugin(this); }, postOpenObject: function (object, type) { // 这里不需要额外处理,覆写方法已经在布局渲染时自动加星号 }, }); let PimcoreTestPlugin = new pimcore.test.plugin();
注意事项
- 把代码里的
mandatoryDeFields数组替换为你实际需要设置德语必填的字段名 - 如果你的德语语言code不是
de,替换为你后台实际配置的语种标识 - 该逻辑不会影响全局必填字段的星号显示,也不会改动核心源码,升级Pimcore版本时兼容性更好
内容的提问来源于stack exchange,提问作者MyZik
相关产品推荐
相关产品推荐

