1

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

模板可以输出:

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

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

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

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

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

或者,我是否可以使用类似于 Will Price 的这种方法的语法,专门针对 SiteEdit 使用 DWT 和 C# 程序集帮助

4

3 回答 3

3

I agree with John, I would implement this as a component link in the RTF. But I wouldn't use any template code, I would instead override Tridion's LinkTagHandler. In the doEndTag method, you can check if you would want to resolve the linked component as a regular dynamic link (in which case you just call the super class), or if you want to insert the DCP there (in which case you can call the ComponentPresentationTagHandler).

You can then configure your taghandler, overriding the Tridion default LinkTagHandler (you can do this in the cd_deployer_conf.xml). Mind you, I haven't tried any of this, but I don't see why it wouldn't work.

To configure your custom tag handler, add the following to the 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>

One important note: if you decide to override any of the built-in tag handlers, you need to specify all of them!

于 2012-05-02T07:45:26.117 回答
1

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

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

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

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

于 2012-05-02T03:21:32.567 回答
1

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

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

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

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

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

于 2012-05-02T03:33:35.547 回答