0

(使用 Ektron 版本 8.6.1)

假设我有一个 smartform ContactInfo,例如:

<ContactInfo>
    <Name></Name>
    <Email></Email>
</ContactInfo>

我想创建另一个智能表单(例如)并在里面NewsArticle“嵌入”ContactInfo

<NewsArticle>
    <Title></Title>
    <Summary></Summary>
    ...
    <ContactInfo>
        <Name></Name>
        <Email></Email>
    </ContactInfo>
</NewsArticle>

到目前为止,我的解决方案是包含一个Resource Selector字段来添加对现有 smartform实例的引用。我更愿意在配置级别进行关联,以使数据输入工作流程更直观。

我正在使用 Bill CavaContentTypes并从 smartform XSD 生成类,因此它还可以使演示代码更自然和类型安全,因为可以直接访问嵌入式字段(而不是必须基于引用 ID 发出另一个请求,这可能是也可能不是我期望的智能表单的 ID)。

我认为这是不可能开箱即用的;我不反对破解 Workarea 代码来完成类似的工作。有没有人有这样的场景经验?

我从 Ektron 代表那里听说,他们计划在即将到来的夏季版本中提升 smartforms 的作用——谁能提供更多关于这一点的信息?也许会支持像我描述的那样的 smartform 组合?

4

2 回答 2

1

目前无法进行 smartform 合成。根据为什么/如果您确实需要第二个 smartform 定义,您可以只在新闻文章中定义联系信息。

如果联系信息智能表单以一对多或多对多的方式与新闻文章相关,那么使用资源选择器是我所知道的创建您正在寻找的关系的唯一方法。

如果关系是一对一或多对一的,那么我建议取消单独的 smartform 定义。

如果您可以为内容作者阐明您尝试实现的工作流程,我可能会做出更好的回应。

于 2013-08-09T19:25:29.243 回答
0

内容类型将代表 CMS 中的数据。假设在您的示例中,NewsArticle 包含对 ContactInfo 的引用。从表示的角度来看,将 ContactInfo 嵌入到 NewsArticle 中可能是有意义的,但它会将 ContentTypes 变成单向数据模型。您将失去构建新 NewsArticle 并将其保存到 CMS 中的能力。

可能对您有用的方法是将内容类型保持原样,并使用资源选择器中的 ContactInfo 的 id。然后创建一个 NewsArticleDisplayModel... 本质上是一个包含新闻文章数据以及 ContactName 和 ContactEmail 的视图模型。

现在,如果您需要可搜索的联系信息,您可以使用CMS 扩展并挂钩到 OnBeforePublish 事件以使用 ContactInfo 中的名称更新可搜索的元数据,以便可以使用来自的值搜索 NewsArticle其他“嵌入式”资源。不过,这可能会有点棘手……理想情况下,您还必须挂钩到 ContactInfo 对象的发布事件,以防该方面也发生变化。然后,您是否创建了一个自定义数据库表来跟踪哪些 NewsArticle 内容 ID 正在使用特定的 ContactInfo?

您的解决方案可以根据需要变得复杂,但我会将内容块分开。如果不出意外,您最终会得到一个更易于维护和升级的解决方案。

于 2013-10-26T22:50:21.970 回答