Tridion 是否在富文本字段中包含动态组件演示文稿?

Tridion 是否在富文本字段中包含动态组件演示文稿?,tridion,Tridion,模板代码可以将TCDL标记转换为适当的内容交付版本 模板可以输出: <tcdl:Link .../> <tcdl:ComponentPresentation .../> 交付方将获得以下格式的标签: <tridion:ComponentLink ... /> <tridion:ComponentPresentation ... /> 问题: 是否可以让内容作者在富文本字段格式区域中输入此类动态组件演示文稿(DCP)?如果可以,是否首选特

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

模板可以输出:

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

交付方将获得以下格式的标签:

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

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

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


或者,我可以模仿Will Price的一些类似于此方法的语法。

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

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

也许有必要将自己的c#构建块解析为自己的格式,然后编写自己的tcdl扩展来解析它


如果您试图将Tridion组件演示文稿放在组件演示文稿中。。我认为您的数据模型有点(很多!)混乱:)

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

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

也许有必要将自己的c#构建块解析为自己的格式,然后编写自己的tcdl扩展来解析它


如果您试图将Tridion组件演示文稿放在组件演示文稿中。。我认为您的数据模型有点(太多!)混乱:)

威尔的文章只提到
SiteEdit
(如果我没有弄错的话)。您的问题是关于“包含来自RTF字段的DCP”的通用机制

在我看来,允许从RTF中引用其他DCP并不是很符合犹太教。我甚至会说这是一种坏习惯。我会避免将内容与布局混合(在DCP的上下文中)。我认为这应该通过模板或元数据来完成

我认为(D)CPs应该放在一个页面上,或者使用某种元数据进行查询。我可能更喜欢使用一些分类法来标记DCP,然后在另一个组件(让我们称之为控制组件)中,您可以指定某种关于要查询和显示在页面上的DCP的条件。然后,模板将生成一些代码(例如自定义标记),这些代码将在
内容交付
端执行

除了你的请求,也许一个链接列表对作者更有意义


最后,回到您的需求,如果您选择在RTF中继续使用DCP,那么我想这只是找到如何从RTF“指向”DCP的命名约定的问题。一种可能是使用巧尽心思构建的
组件链接
(可能带有某个特定的
目标
属性),C#TBB可以理解为解析出来并替换为
调用。我会在RTF中使用组件链接,因为这些链接是为了完整性、一致性、移植等而维护的。

威尔的文章只提到
SiteEdit
(如果我没有弄错的话)。您的问题是关于“包含来自RTF字段的DCP”的通用机制

在我看来,允许从RTF中引用其他DCP并不是很符合犹太教。我甚至会说这是一种坏习惯。我会避免将内容与布局混合(在DCP的上下文中)。我认为这应该通过模板或元数据来完成

我认为(D)CPs应该放在一个页面上,或者使用某种元数据进行查询。我可能更喜欢使用一些分类法来标记DCP,然后在另一个组件(让我们称之为控制组件)中,您可以指定某种关于要查询和显示在页面上的DCP的条件。然后,模板将生成一些代码(例如自定义标记),这些代码将在
内容交付
端执行

除了你的请求,也许一个链接列表对作者更有意义


最后,回到您的需求,如果您选择在RTF中继续使用DCP,那么我想这只是找到如何从RTF“指向”DCP的命名约定的问题。一种可能是使用巧尽心思构建的
组件链接
(可能带有某个特定的
目标
属性),C#TBB可以理解为解析出来并替换为
调用。我会在RTF中使用组件链接,因为这些链接是为了完整性、一致性、移植等而维护的。

我同意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>


一个重要的注意事项是:如果决定覆盖任何内置标记处理程序,则需要指定所有这些处理程序

我同意John的观点,我将在RTF中将其作为组件链接实现。但我不会使用任何模板代码,而是重写Tridio