如何在视觉上分离 EPiServer ContentType 的属性?

How can I separate properties visually for an EPiServer ContentType?

我想让编辑器在页面上(在所有属性视图中)填写内容时体验更好、更美观。可以是简单的分隔符或标题..

我已经在使用制表符,只要它有意义。此外,我一直在尝试使用块作为属性。这增加了一个清晰的标题的很好的分离,但是当属性真正属于页面类型时,需要维护更多的代码并且说实话有点混乱。

Out-of-the-box,除非您使用 block-properties,否则无法用标题装饰属性。

但是,我认为您的问题很有趣,而且我发现扩展 Episerver 以适应这种行为非常容易。我写了一个示例解决方案,您可以随意使用:https://arlc.dk/grouping-properties-with-headlines-without-property-blocks.

如果您不喜欢该解决方案,另一种方法是介绍您自己的 Property-type(标题),并创建 1) 自定义 dojo-widget 以简单地显示标题,以及 2)用于设置 ClientEditingClass 的 EditorDescriptor。 Linus 在此处写了一篇精彩的博客 post:https://world.episerver.com/blogs/Linus-Ekstrom/Dates/2012/7/Creating-a-custom-editor-for-a-property/.

编辑: 我明白了,我跳过最重要的部分的速度太快了。

您不必通过替换文件来覆盖任何文件,也不必提取 Shell.zip(除非您对 Episerver 如何实现其小部件感到好奇)。覆盖特定组件的部分是 define("epi/shell/form/Field"。只要你在 shell 之后加载这个小部件的定义,dojo 就会使用你的实现,只要有东西需要 "epi/shell/form/Field"。确保您的实现在之后加载的东西在 module.config 中,在 'This injects our field-implementation [...]'.

路径 ~/ClientResources/Scripts/Shell/Field/Field.js 只是我选择放置 Field.js 覆盖版本的位置。你可以把它放在任何你喜欢的地方,只要你用新路径相应地更新 module.config 。 它是这样工作的:首先,Episerver 定义小部件 A。然后你定义一个同名的小部件 A。当任何东西试图获取 A 时,它 returns 你的实现,而不是 Episerver 的。