2012-05-02 8 views
1

テンプレートコードは、TCDLタグを適切なコンテンツ配信バージョンに変換できます。リッチテキストフィールドにダイナミックコンポーネントプレゼンテーションを含める?

テンプレートを出力することができます:

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

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

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

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

:追加されたコンテキストと、Willの記事へのリンクが変更されました。

また、このアプローチと同様の構文をWill specifically for SiteEdit using DWT and C# assembly helpから模倣することもできます。

+1

リッチテキストフィールドからDCPを参照する方法があるかどうかは、ページテンプレートのDWTと同じように思っています。答えは「はい」です。 DWFの場合と同じように、同じaspまたはjavaコードをRTFのソースタブに追加するだけです。それは醜いことですが、あなたはそれを行うことができます。 –

+0

はい、それは私が恐れる技術的な質問です。 –

答えて

3

私は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> 

一つの重要な注意:あなたは、組み込みのタグハンドラのいずれかを上書きすることにした場合、あなたはすべて指定する必要がそのうちの!

+0

Quirijnがリードしてくれてありがとう、CMとCDの間のスペースを考慮するとは思わなかった。 'doEndTag'("カスタムTCDLタグの作成_ "と" _SDL Tridion_で管理される_ウェブサイト機能の拡張 ")を検索する[SDLライブコンテンツ](http://sdllivecontent.sdl.com/LiveContent/)のサンプルをいくつか見つけましたが、ここではコメントをリンクするのに長い時間)。 –

+0

特定の解決策は、特定の環境およびチームによって異なります。 –

1

ない私は完全に質問を理解しますが、ここで行くことを確認:

ユーザーがあなたの構成に応じて、リッチテキストフィールド内のコンポーネントのリンク(コンポーネントのプレゼンテーションのタイプと出力タイプ)を入力した場合は値がで解決します、最も可能性が高い。

独自のC#ビルディングブロックを独自のフォーマットに解決してから、独自のtcdl拡張を書き込んで解析する価値があります。

あなたがコンポーネントのプレゼンテーション内Tridionのコンポーネントのプレゼンテーションを入れしようとしている場合..私はあなたのデータモデルは、ビットは(たくさん!)私は場合はウィルの記事が唯一SiteEdit(を参照:)

+0

通常、@Mihaiのアウトラインと同じようにコンテンツ配信側のクエリをお勧めしますが、要件にはファイルベースの公開(カスタムメタデータやクエリなし)が含まれています。たぶんこれらのデザイン中心のRTFはDWTで行うことができます。どちらの方法であれ、C#TBBは、コンポーネントを使用する場合はCPを解析するか、DWTからこれらを選択するのに役立ちます。 –

1

を台無しだと思います間違いではない)。あなたの質問は、RTFフィールド 'からのDCPを含む' 'の汎用メカニズムに関するものです。

私の考えでは、他のDCPをRTFから参照できるようにすることは、それほどうまくいきません。私はそれが悪い習慣であると言うことに行くだろう。私はレイアウトとコンテンツを混在させないでください(DCPのコンテキストで)。テンプレートやメタデータを使って行うべきだと私は思う。

私は、(D)CPは、ページに置かれるか、何らかの種類のメタデータを使用するために照会されるべきだと思います。おそらく、DCPにタグを付けるタクソノミを持っていて、別のコンポーネント(コントロールコンポーネントと呼ぶ)で、どのDCPをクエリーしてページに表示するかに関するカクテルを指定することを好みます。テンプレートは、Content Delivery側で実行されるいくつかのコード(カスタムタグなど)を生成します。

あなたの要求に代えて、おそらくリンクのリストが作者にとってより意味をなさないでしょう。あなたはRTFでのDCPを進めて行くことを選択した場合

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

+0

ああ、間違ったリンクを持っていた - はいこれは一般的な要件のための_specifically_です。 ;-)私は質問のタイトルとリンクを更新しました。私はページ、クエリ、またはリンクのリストがこのタイプの "埋め込み"(D)CPに適していることに同意します。 DCPは、コンポーネントが作成される共有コンテンツの公開のコンテキスト内に実際には存在しません。これを推進する主な要件は、同じアイデアを使用するが、1:1のコンテンツマッピング(1:多くのCPではなく)を使用する既存のWCM実装です。 –

関連する問題