我有一个复杂的场景,我正在尝试使用 Orchard CMS 部件进行建模。
现在这里是简化版本,以明确我的问题。
我有一个部件名称,例如 PersonPart,它只有一个属性:名称。我有另一个包含人员角色的部分,将其命名为 PersonRolePart,并且只有一个属性 Role
在 Orchard,我创建了所有合适的管道(处理程序、驱动程序、视图......)
在迁移中,我创建了一个名为 Person 的新内容类型,其中包含两个部分。
ContentDefinitionManager.AlterTypeDefinition("Person", cfg => cfg
.WithPart("PersonPart")
.WithPart("PersonRolePart")
.WithPart("CommonPart")
.Creatable(false) );
到目前为止一切顺利,我可以创建一个新人并编辑这两个部分。
我拥有的另一部分是绑定到上面定义的 PersonRolePart 之一的 ServicePart。
现在的问题:
出于报告目的,我需要通过 PersonRole 获取所有服务并获取属于该角色的人员详细信息,或者换句话说,获取上面定义的 Person 复合类型中使用的所有(确实只有一个)PersonPart。
怎么做?
现在在一个非果园的世界里,我会在 2 之间创建一个简单的 1:1 关系。
到目前为止,我的(失败的)尝试是将 PersonRoleRecord_Id 字段添加到 PersonPartRecord 并将 PersonRecord_Id 添加到 Person 角色......但我不知道如何在驱动程序或处理程序上设置正确的 id,因为两者都只看到自己的部分。
是否有可能从驱动程序中获取内容类型中其他伙伴部分的实例?
无法合并人员和角色。场景比这更复杂,我需要相同的人部分和 3 个不同的类似角色的部分用于不同的目的,我想避免重复普通人数据 3 次。
另一个想法是创建一个适当的处理程序,但我不知道如何为虚拟内容类型创建一个处理程序,就像我所做的那样。