1

テンプレート コードは、TCDL タグを適切なコンテンツ配信バージョンに変換できます。

テンプレートは以下を出力できます:

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

配信側は、次の形式でタグを取得します。

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

質問: コンテンツ作成者がそのような動的コンポーネント プレゼンテーション (DCP) をリッチ テキスト フィールド形式の領域に入力できるようにすることはできますか? もしそうなら、特定の形式が優先され、リンク先の DCP をどのように公開する必要がありますか?

編集: コンテキストを追加し、Will の記事へのリンクを変更しました。

または、DWT と C# アセンブリのヘルプを使用して、SiteEdit に特化した Will Price のこのアプローチに似た構文を模倣することもできます。

4

3 に答える 3

3

私はジョンに同意します。これを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>

重要な注意事項:組み込みのタグハンドラーのいずれかをオーバーライドする場合は、それらすべてを指定する必要があります。

于 2012-05-02T07:45:26.117 に答える
1

私が質問を完全に理解しているかどうかはわかりませんが、ここに行きます:

構成(コンポーネントの表示のタイプと出力のタイプ)に応じて、ユーザーがリッチテキストフィールド内にコンポーネントリンクを入力すると、値は解決され、ほとんどの場合、になります。

独自のc#ビルディングブロックを独自の形式に解決してから、独自のtcdl拡張機能を記述して解析することをお勧めします。

Tridionコンポーネントプレゼンテーションをコンポーネントプレゼンテーション内に配置しようとしている場合..データモデルが少し(たくさん!)混乱していると思います:)

于 2012-05-02T03:21:32.567 に答える
1

Will の記事はSiteEdit(私が間違っていなければ) のみを参照しています。あなたの質問は、「 RTF フィールドから DCP を含める」という一般的なメカニズムに関するものです。

他の DCP を RTF から参照できるようにすることは、私の見解ではあまり適切ではありません。私はそれが悪い習慣だとさえ言います。(DCP のコンテキストで) コンテンツとレイアウトを混在させることは避けます。これは、テンプレートまたはメタデータを介して行う必要があると思います。

(D)CP はページに配置するか、ある種のメタデータを使用するために照会する必要があると思います。おそらく、DCP にタグを付けるためのいくつかの分類法を用意することをお勧めします。次に、別のコンポーネント (コントロール コンポーネントと呼びましょう) で、クエリを実行してページに表示する DCP に関する何らかの基準カクテルを指定します。Content Deliveryテンプレートは、サイドで実行されるコード (カスタム タグなど) を生成します。

あなたのリクエストの代わりに、リンクのリストが作成者にとってより意味のあるものになるかもしれません.

最後に、要件に戻ると、RTF で DCP を使用することを選択した場合、RTF から DCP を「ポイント」する方法に関する命名規則を見つけるだけの問題だと思います。1 つの可能性は、C# TBB が解析して呼び出しに置き換えることを理解できる、特別に細工されたComponent Link(おそらく特定の属性を持つ) を使用することです。これらのリンクは整合性、一貫性、移植などのために維持されるため、RTF でコンポーネント リンクを使用します。target<tridion:ComponentPresentation.../>

于 2012-05-02T03:33:35.547 に答える