Orchardcms 为什么ContentPart不在ContentItem中?
为什么ContentItem中不包含无字段ContentPart 下面是Migrations.cs中的代码:Orchardcms 为什么ContentPart不在ContentItem中?,orchardcms,Orchardcms,为什么ContentItem中不包含无字段ContentPart 下面是Migrations.cs中的代码: SchemaBuilder.CreateTable("ImageDescribedPartRecord", table => table.ContentPartRecord()); ContentDefinitionManager.AlterPartDefinition( "ImageDescribedPart",
SchemaBuilder.CreateTable("ImageDescribedPartRecord",
table => table.ContentPartRecord());
ContentDefinitionManager.AlterPartDefinition(
"ImageDescribedPart",
cpd => cpd.WithField(
"Image",
b => b
.OfType("MediaPickerField")
.WithSetting("MediaPickerFieldSettings.Required", "false")));
ContentDefinitionManager.AlterTypeDefinition(
"PlantPicture",
cfg => cfg
.WithPart("ImageDescribedPart")
.WithPart("CommonPart", p => p.WithSetting("OwnerEditorSettings.ShowOwnerEditor", "false"))
.WithPart("BodyPart")
.WithPart("TitlePart")
.WithPart("AutoroutePart"
, builder =>
builder
.WithSetting("AutorouteSettings.AllowCustomPattern", "false")
.WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "true")
.WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Container', Pattern: '{Content.Container.Path}/images/{Content.Slug}', Description: 'apgii/taxon/sub-taxon/images/title'}]")
.WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
.WithPart("ContainablePart")
.Creatable(true)
// todo: The following doesn't work. Make it work.
.WithSetting("BodyPartSettings.FlavorDefault", "text")
);
以下是ContentPart的代码:
public class ImageDescribedPart : ContentPart<ImageDescribedPartRecord>{
}
public class ImageDescribedPartRecord :ContentPartRecord {}
您将该项“强制转换”为零件,并将其存储为IEnumerable。我想知道这怎么不会导致编译错误,因为这是错误的
最可能的问题根源是,如果您计划通过“铸造”直接使用零件,则零件应具有相应的驱动程序(可以为空)。确定。问题是处理程序中没有添加筛选器。已添加Activator筛选器:
public ImageDescribedHandler (IRepository<ImageDescribedPartRecord> repository, INavigationManager navigationManager)
{
Filters.Add(new ActivatingFilter<ImageDescribedPart>("PlantPicture"));
}
公共图像描述处理程序(IRepository存储库,INavigationManager导航管理器)
{
过滤器。添加(新激活过滤器(“PlantPicture”);
}
还删除了用于创建表格的行。该行可有效转换为零件。请参阅ContentExtension.aspat方法(此IEnumerable items)。此外,零件不需要驱动程序来查询它。它需要一个正确的过滤器。请看下面我的答案。你说得对,我已经监督过这个项目的复数形式。我为这一混乱道歉。但是,我仍然正确地回答了您的问题:我已经谈到了“casting”(As()方法),是的,如果您按照前面介绍的方式连接迁移中的部件,您确实需要一个驱动程序。因此,即使你找到了另一个解决方案,我的答案也是正确的。我不明白你为什么否决它。@Piedone是对的-最初你只在迁移中描述了这一部分。在这种情况下,这个答案是完全正确的-有一个司机失踪了。你采取了不同的方法,好吧,但这并不是否决有效答案的理由。另外,请记住,当使用
ActivatingFilter
时,您将无法从管理UI中删除该部分。@Artjom part需要一个驱动程序。这是一个很好的做法。如果您的部件不执行任何操作(不保存任何数据,也不用于显示),您还可以将字段附加到名为与您的类型相同的部件,而无需进行筛选ActivatingFilter
是一种简写方法,用于在任何时候都需要将某些零件附加到特定类型。它不是每个零件都需要的,也不应该每次都使用。谢谢你的评论和回答。是的,我没有想到要添加部件的驱动程序。关于投票。不是我干的。
2012-12-07 16:28:45,616 [35] TaxonomyNodePartDriver - Items count: 2
2012-12-07 16:28:45,617 [35] TaxonomyNodePartDriver - Item 0: Test
2012-12-07 16:28:45,619 [35] TaxonomyNodePartDriver - Item 1: test img 2
2012-12-07 16:28:45,619 [35] TaxonomyNodePartDriver - Images count: 0
public ImageDescribedHandler (IRepository<ImageDescribedPartRecord> repository, INavigationManager navigationManager)
{
Filters.Add(new ActivatingFilter<ImageDescribedPart>("PlantPicture"));
}