リンクされたコンポーネントのフィールドを編集できるようにすることが、SiteEdit2009SP2で導入されました。SiteEditフロントエンドは、ステージングサーバーから返されるHTMLに埋め込まれているSiteEditコマンド言語に基づいて機能します。
したがって、そこに単一のコンポーネントがあるとしましょう。
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_1",
"ComponentID" : "tcm:12-549", "ComponentTemplateID" : "tcm:12-568-32",
"ComponentVersion" : 5, "IsQueryBased" : false } -->
<label>Title: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_1",
"XPath": "tcm:Content/custom:Content/custom:Title",
"IsMultiValued":false} -->
Tips for getting insurance when you have a pre-existing condition
</span>
</div>
HTMLがSiteEditStart SiteEdit
に与えるコマンドがあり、それらがコンポーネントプレゼンテーションとタイトルフィールドをどのようにマークしているかを確認できます。
リンクされたコンポーネントのフィールドをレンダリングする場合は、次のような対応するコンポーネントプレゼンテーションコマンドも必要です。
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_1",
"ComponentID": "tcm:12-54", "ComponentTemplateID": "tcm:12-56-32",
"ComponentVersion" : 5, "IsQueryBased" : false } -->
<label>Title: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_1",
"XPath": "tcm:Content/custom:Content/custom:Title",
"IsMultiValued":false} -->
Tips for getting insurance when you have a pre-existing condition
</span>
<br />
<div class="cp">
<!-- Start SiteEdit Component Presentation: {"ID" : "cp_2",
"ComponentID": "tcm:12-85", "ComponentTemplateID": "tcm:12-60-32",
"ComponentVersion" : 2, "IsQueryBased" : true } -->
<label>Byline: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_2",
"XPath": "tcm:Metadata/custom:Metadata/custom:ByLine",
"IsMultiValued":false} -->
"It's a huge problem, because ..." says one expert.
</span>
<br />
<label>Copyright: </label>
<span>
<!-- Start SiteEdit Component Field: {"ID": "cf_3",
"XPath": "tcm:Metadata/custom:Metadata/custom:Copyright",
"IsMultiValued":false} -->
Getty Images
</span>
</div>
</div>
これで、2つのStart SiteEdit Component Presentation
コマンドがあります。1つは外部コンポーネント用で、もう1つはリンクされたコンポーネント用です。ここで注意すべき重要な点の1つは、ネストされたコンポーネントプレゼンテーションのIsQueryBasedプロパティをtrueに設定する必要があることです。これは、SiteEditフロントエンドに、コンポーネントプレゼンテーションが実際にTridionから取得するページXMLに存在することを想定していないことを通知します。
SiteEditフロントエンドでは、コマンドがHTMLにどのように配置されるかは問題ではありません。
最も一般的なのは、対応する部分をマークするRenderComponentPresentation
andを呼び出すことです。RenderComponentField
ただし、残念ながら、このRenderComponentField
関数は、次のように表示される、いわゆる「コンテキストコンポーネント」からフィールドをレンダリングするためにのみ使用できます。
Item component = _package.GetByType(ContentType.Component);
これは、単一のDWTで、へのすべての呼び出しがRenderComponentField
同じコンテキストコンポーネントで機能することを意味します。RenderComponentField
したがって、単一のDWTを呼び出して、2つの異なるコンポーネントからフィールドをレンダリングすることはできません。
これを解決するには、次の2つのオプションがあります。
RenderComponentPresentation
リンクされたコンポーネントを呼び出す
Start SiteEdit Component Presentation
とStart SiteEdit Component Field
コマンドをDWTで自分でレンダリングします
オプション1は、取得できる最もクリーンな分離です。別のコンポーネントからフィールドをレンダリングしているため、基本的に別のコンポーネントプレゼンテーションをレンダリングしています。リンクされたフィールドのレイアウトを別のDWTに分割し、その周りにCTを構築すると、メインのDWTで次のようにレンダリングできます。
@@RenderComponentPresentation(Component.Fields.Name, "tcm:1-2-32")@@
Walterは、Tridionテンプレートに関する彼の記事でこれを最もよく説明しています。
このDreamweaverテンプレートのスコープは、現在のコンポーネントフィールドの表示に限定されているため、RenderComponentPresentation関数を使用して追加の手順を実行する必要があります。マルチメディアコンポーネントのTCMURIを、別のDreamweaverテンプレートのTCMURIと一緒にこの関数に渡す必要があります。
RenderComponentField
より多くのCTとDWTにつながりますが、これらのDWTは、通常どおりに使用できるようになるため、はるかに単純になります。
オプション2は、実際には、DWTのSiteEditコマンドを使用してHTMLコメントを出力していることを意味します。コマンド言語はAPIの一部として文書化されているため(上記のリンクを参照)、SiteEdit2009の将来のバージョンで変更される可能性はほとんどありません。
長い話で申し訳ありませんが、あなたはたまたまここでトリッキーなユースケースを引き起こしました。私はそれが理にかなっていることを願っています。