【问题标题】:Including dynamic component presentations within a rich text field?在富文本字段中包含动态组件表示?
【发布时间】:2012-05-11 12:50:18
【问题描述】:

模板代码可以将 TCDL 标签转换为适当的内容交付版本。

模板可以输出:

<tcdl:Link .../>
<tcdl:ComponentPresentation .../>

送货方会得到这种格式的标签:

<tridion:ComponentLink ... />
<tridion:ComponentPresentation ... />

问题: 是否可以让内容作者在富文本字段格式区域中输入这样的动态组件演示 (DCP)? 如果可以,是否首选特定格式以及如何我们应该发布链接到的 DCP 吗?

编辑:添加上下文并更改了 Will 文章的链接。

或者,我可以模仿 Will Price specifically for SiteEdit using DWT and C# assembly help 中的一些类似于这种方法的语法。

【问题讨论】:

  • 我认为您要问的是是否有一种方法可以从富文本字段中引用 DCP,就像您在页面模板的 DWT 中那样。答案是肯定的。只需将相同的 asp 或 java 代码添加到 RTF 的源选项卡中,就像在 DWT 中一样。这是一件丑陋的事情,但你可以做到。
  • 是的,我担心这是技术问题。

标签: tridion


【解决方案1】:

我同意 John 的观点,我会将其实现为 RTF 中的组件链接。但我不会使用任何模板代码,而是重写 Tridion 的 LinkTagHandler。在 doEndTag 方法中,您可以检查是否要将链接的组件解析为常规动态链接(在这种情况下您只需调用超类),或者是否要在其中插入 DCP(在这种情况下您可以调用ComponentPresentationTagHandler)。

然后您可以配置您的标记处理程序,覆盖 Tridion 默认的 LinkTagHandler(您可以在 cd_deployer_conf.xml 中执行此操作)。 请注意,我没有尝试过任何这些,但我不明白为什么它不起作用。

要配置您的自定义标记处理程序,请将以下内容添加到 cd_deployer_conf.xml:

<TCDLEngine>
    <Properties>
        <!-- keep whatever you have in this section! -->
    </Properties>
    <Tags>
        <Tag Namespace="tcdl" Name="ContentHeader"><Handler Class="com.tridion.tcdl.tags.ContentHeaderTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="Link"><Handler Class="com.mycompany.tridion.extensions.CustomTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="Link"><Handler Class="com.tridion.tcdl.tags.DynamicLinkInfoTracker"/></Tag>
        <Tag Namespace="tcdl" Name="TargetGroup"><Handler Class="com.tridion.tcdl.tags.TargetGroupTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="ComponentPresentation"><Handler Class="com.tridion.tcdl.tags.ComponentPresentationTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="FirstLine"><Handler Class="com.tridion.tcdl.tags.FirstLineTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="IncrementTrackingKey"><Handler Class="com.tridion.tcdl.tags.IncrementTrackingKeyTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="PositionMarker"><Handler Class="com.tridion.tcdl.tags.PositionMarkerTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="ContextProperty"><Handler Class="com.tridion.tcdl.tags.ContextPropertyTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="Dependency"><Handler Class="com.tridion.tcdl.tags.DependencyTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="Comment"><Handler Class="com.tridion.tcdl.tags.CommentTagHandler"/></Tag>
        <Tag Namespace="tcdl" Name="TaxonomyControl"><Handler Class="com.tridion.tcdl.tags.TaxonomyTagHandler"/></Tag>
    </Tags>
</TCDLEngine>

一个重要提示:如果您决定覆盖任何内置标记处理程序,则需要指定所有这些处理程序!

【讨论】:

  • 感谢 Quirijn 的领导,没想到要考虑 CM 和 CD 之间的空间。在SDL Live Content 上找到一些示例,搜索doEndTag(“创建自定义 TCDL 标记”和“扩展由 SDL Tridion 管理的网站功能”,但网址太长,无法在此处的评论中链接)。
  • 接受,但需要注意的是具体解决方案取决于给定的环境和团队。
【解决方案2】:

我不确定我是否完全理解这个问题,但这里是:

如果用户根据您的配置(组件表示的类型和输出类型)在富文本字段中输入组件链接,则该值将被解析,很可能是一个。

可能值得让您自己的 c# 构建块解析为您自己的格式,然后编写您自己的 tcdl 扩展来解析它。

如果您尝试将 Tridion 组件表示放在组件表示中。我认为您的数据模型有点(很多!)搞砸了 :)

【讨论】:

  • 谢谢,我通常会推荐内容交付端查询作为@Mihai 的概述,但要求包括基于文件的发布(无自定义元数据或查询)。也许这些以设计为中心的 RTF 可以用 DWT 来完成。无论哪种方式,如果使用组件,C# TBB 可以帮助解析 CP,或者帮助从 DWT 中选择这些。
【解决方案3】:

Will 的文章仅指SiteEdit(如果我没记错的话)。您的问题是关于“包括来自 RTF 字段的 DCP”的通用机制。

在我看来,允许从 RTF 中引用其他 DCP 不是很合乎情理。我什至会说这是不好的做法。我会避免将内容与布局混合(在 DCP 的上下文中)。我认为这应该在模板中或通过元数据完成。

我认为 (D)CP 应放置在页面上或查询是否使用某种元数据。我可能希望有一些分类法来标记 DCP,然后在另一个组件(我们称之为控制组件)中,您将指定某种标准鸡尾酒,以了解您想要在页面上查询和显示哪些 DCP。然后模板将生成一些代码(例如自定义标签),这些代码将在Content Delivery 端执行。

根据您的要求,也许链接列表对作者来说更有意义。

最后,回到您的要求,如果您选择在 RTF 中继续使用 DCP,那么我想这只是找到关于如何“指向”的命名约定的问题来自 RTF 的 DCP。一种可能性是使用特制的Component Link(可能带有一些特定的target 属性),C# TBB 可以理解解析出来并用&lt;tridion:ComponentPresentation.../&gt; 调用替换。我会在 RTF 中使用组件链接,因为这些链接是为了完整性、一致性、移植等而维护的......

【讨论】:

  • 啊,链接错误——是的,这是专门满足一般要求的。 ;-) 我更新了问题标题和链接。我同意页面、查询或链接列表更适合这种“嵌入式”(D)CP。 DCP 并不真正存在于创建组件的共享内容发布的上下文中。推动这一点的主要要求是现有的 WCM 实现,它使用相同的想法,但具有 1:1 的内容映射(而不是 1:many CP)。
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2012-06-27
  • 2022-09-02
相关资源
最近更新 更多