如何仅将内容部件附加到特定类型或特定内容项?

时间:2016-04-13 13:36:38

标签: orchardcms orchardcms-1.9

我有两个类似的问题,我怀疑它们有一个共同的解决方案。

1)我想创建可附加的自定义部件,但仅限于特定的内容类型,例如,只有分类法。如果可以通过迁移开箱即可,例如.Attachable(cfg => cfg.ToType("Taxonomy")),但我不认为它是真的很酷。

目前,为了防止我的自定义部分被用于它不适合的内容,我只是在驱动程序方法中写入检查:

protected override DriverResult Editor(CustomPart part, dynamic shapeHelper)
{
    if (part.ContentItem.ContentType != "Taxonomy") return null;

    return ContentShape("Parts_Custom_Edit", ...
}

这是一个很好的方法吗? Handler会更适合这种逻辑吗?

2)同样,我希望能够有条件地将不同的部分附加到不同的内容项目。例如,我希望分类法中只有第一级父条款才能包含某些字段,而子条款则包含其他字段。

我目前能够处理这个问题的最好方法是创建一个包含所有字段的Part,并在其Driver方法中对上面的那个进行类似的检查,以根据容器返回不同的模型。然后在模板View中检查要渲染的字段:

@if (Model.ThisField != null) {
    <div>@Html.EditorFor(m => m.ThisField)</div>
}
else {
    <div>@Html.EditorFor(m => m.ThatField)</div>
}

理想情况下,我想创建一个可附加的部件,当它连接到Type时,能够将几个不可连接的辅助部件添加到现有的内容部件,并在创建时添加到新的内容部件或者更新。有没有一种无痛的方法可以做到这一点?我认为&#39;焊接&#39;可能是我需要的,但我还没有能够找到任何可以向我解释焊接的文档或教程,就像我五岁那样。

1 个答案:

答案 0 :(得分:0)

我认为您需要实施动态焊接方法。我必须解决一个类似的问题,它已发布here。希望这会有所帮助。