在Orchard CMS中提供形状时,有没有办法区分编辑器的创建和编辑?
也许这甚至可以在Placement.info级别完成?
基本上我有一个ContentType,它使用Autoroute Part来设置该实体的永久链接。我不希望人们在初始创建后能够编辑它,因此在实际编辑模式下隐藏部件会很棒 - 但是在第一个“创建”页面上可以看到它并且可用
答案 0 :(得分:2)
在Orchard CMS中提供形状时,有没有办法区分编辑器的创建和编辑?
除非模块已经专门编写,否则不会这样做。如果你看AutoroutePartDriver
,你会发现它总是返回一个名为Parts_Autoroute_Edit
的形状,因此在这种情况下,使用Placement.info是不可能的。
您可能没有看到的一件事是Autoroute部分有两个设置可见内容类型编辑页面(例如~/Admin/ContentTypes/Edit/Page
):
取消选中这两个将阻止在创建内容项后编辑路线,但是在创建内容项时也无法编辑它,相反,您将不得不依赖生成的slug。如果你使用像{Content.Slug}
这样的模式,或者如果你有自己的确定方法来生成基于内容类型的slug,那么你将得到合理的slu g然后创建一个实现ITokenProvider
的模块并创建你的使用您的算法的自己的令牌。
如果绝对必须具有问题中描述的行为,那么您可以创建一个模块来抑制当前AutoroutePartDriver
(使用OrchardSuppressDependency
),但是也继承了它。然后,您可以继续覆盖其中一个Editor(...)
方法,以在生成编辑器形状时或在保存项目时进行拦截。您可以使用part.ContentItem.Id == 0
查看是否正在处理新的内容项。这种方法的一个重要警告是它依赖于AutoroutePartDriver的实现,所以如果改变了你的驱动程序可能会破坏。