有没有办法在内容编辑器中动态更改项目的工具提示?它不一定是工具栏 - 我只是想输出一个基于字段旁边的项目和字段的文本,以显示该字段的默认值是什么。到目前为止,在管道处理器中,无法设置任何字段属性 - 它们都是只读的。知道我怎么可能只是标记它,或者类似的东西吗?
问问题
1102 次
1 回答
10
是的,可以这样做,但它确实需要少量代码反射来修改内容编辑器中各个字段的外观,因为目前在字段级别上没有可用于内容编辑器的 Sitecore 管道。
- 创建一个继承自 Sitecore.Shell.Applications.ContentEditor.EditorFormatter 的类 MyEditorFormatter。
- 使用 Reflector 或 DotPeek 之类的工具,将两个方法的实现从原始 EditorFormatter 复制到新类中:
注意: RenderLabel 是编写字段级工具提示的方法,但由于它不是虚拟的,因此覆盖其功能的唯一方法是覆盖调用它的 RenderField。public virtual void RenderField(System.Web.UI.Control parent, Editor.Field field, bool readOnly) {...} public void RenderLabel(System.Web.UI.Control parent, Editor.Field field, Item fieldType, bool readOnly) {...}
- 将 RenderField 的签名从virtual更改为override。这将导致调用 args.EditorFormatter.RenderField 来运行新代码。
- 在 RenderLabel 中插入所需的工具提示逻辑:
注意:您可以用新逻辑替换(自定义文本) 。另请注意,您可能希望删除对 Description.Length 的检查,因为如果未填充 Description,这将阻止您的新工具提示出现。if (itemField.Description.Length > 0) { str4 = " title=\"" + itemField.Description + " (custom text)\""; }
创建一个管道处理器,用您的替换 Sitecore 的 EditorFormatter:
填充 EditorFormatter.Arguments 是防止空对象异常所必需的。using Sitecore.Shell.Applications.ContentEditor.Pipelines.RenderContentEditor; namespace CustomizedEditor { public class ChangeToMyEditorFormatter : RenderStandardContentEditor { public void Process(RenderContentEditorArgs args) { args.EditorFormatter = new MyEditorFormatter(); args.EditorFormatter.Arguments = args; } } }
将您的管道处理器添加到 RenderContentEditor 管道的开头:
<renderContentEditor>
<processor type="CustomizedEditor.ChangeToMyEditorFormatter, CustomizedEditor" />
<processor type="Sitecore.Shell.Applications.ContentEditor.Pipelines.RenderContentEditor.RenderSkinedContentEditor, Sitecore.Client" />
<processor type="Sitecore.Shell.Applications.ContentEditor.Pipelines.RenderContentEditor.RenderStandardContentEditor, Sitecore.Client" />
</renderContentEditor>
您的自定义工具提示现在将出现:
更新: Mike Reynolds 写了一篇非常好的文章,展示了如何使用这种方法向内容编辑器添加“此字段在哪里定义”功能。
于 2013-02-09T16:15:33.687 回答