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

时间:2012-05-02 02:53:52

标签: tridion

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

模板可以输出:

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

然后,您可以配置您的taghandler,覆盖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>

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

答案 1 :(得分:1)

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

如果用户在富文本字段中输入组件链接,具体取决于您的配置(组件显示类型和输出类型),则该值将被解析,最有可能是a。

将自己的c#building block解析为您自己的格式可能值得,然后编写自己的tcdl扩展来解析它。

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

答案 2 :(得分:1)

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

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

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

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

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