第3レベルのコンポーネントリンクフィールド名にアクセスするには? 埋め込み可能なスキーマとしてフィールドを含むスキーマがあり、その埋め込み可能なスキーマには、別のスキーマから派生したコンポーネント リンクがあります。そのスキーマのフィールドを取得するにはどうすればよいですか?
4 に答える
それは本当にそれらのフィールドの目的に依存します。おそらく、もう少し情報を提供できますか?
ここに記載されていない別のオプションは、独自の C# ビルディング ブロックを記述して、これらの第 3 レベルのコンポーネントをパッケージに追加することです。そうすることで、DWT レイアウトでの作業が非常に簡単になります。
たとえば、第 3 レベルの項目を使用してオフィスの場所のリストを生成する場合、C# ブロックを記述して、関連するすべてのオフィスの場所のコンポーネントを取得し、それらをパッケージにコンポーネント リスト 'Locations' として追加するだけで十分です。 DWT で行うことは、それらの項目をループして、必要な表示を提供することです。
個人的には、DWT に関数を使用したり追加したりするのは好きではありません。コミュニティからより良い回答を生成するシナリオに関する詳細情報を提供できる場合は、できるだけ単純に保つようにしています。
私の知る限り、組み込み/コンポーネントリンクを制御するには、特別な DWT TBB が必要です。Nuno の Get Extensions を使用できますか? http://www.sdltridionworld.com/community/extension_overview/dreamweaver_get_extension.aspx または、おそらく Razor Mediator を使用します: http://www.sdltridionworld.com/community/2011_extensions/razormediator.aspx
DGX を使用する (MDa が示唆するように) か、C# TBB を記述する (John Winter が示唆するように) 必要がないようRenderComponentPresentation
にするために、使用したいテンプレートでリンクされたコンポーネントをレンダリングするために単に呼び出すこともできます。
<!-- TemplateBeginRepeat name="Component.Fields.LinkFieldName" -->
@@RenderComponentPresentation(Field, "tcm:1-23-32")@@
<!-- TemplateEndRepeat -->
コンポーネントの名前をハイパーリンクとして単純にレンダリングtcm:1-23-32
するのは、コンポーネント テンプレートの TCM URI です。で使用する DWT 内では、、 などtcm:1-23-32
のリンクされたコンポーネントのすべてのフィールドとプロパティを簡単に参照できます。Component.Title
Component.Fields.Field1
関連するトピックは、これらの他の質問/回答で既に説明されていることに注意してください。
- リンクされたコンポーネントのタイトルをレンダリングする -複数のコンポーネント リンクをループして、SDL Tridion 2011 の Dreamweaver TBB でリンクされたコンポーネントのスキーマ名を取得する
- リンクされたコンポーネントの値を取得する - Dreamweaver TBB でリンクされたコンポーネントの値を取得し、SiteEditable にする
- ネストされた埋め込みスキーマの処理 - SDL Tridion 2011 SP1 の Dreamweaver TBB でネストされた繰り返し領域を処理する方法
どういうわけかこれらが十分に役に立たなかった場合は、コンポーネントの XML と動作させようとしている DWT を投稿することをお勧めします。
ここにC#を使用した簡単なサンプルがあります
Session session = engine.GetSession();
Item componentItem = package.GetByName(Package.ComponentName);
Component component = new Component(new TcmUri(componentItem.GetValue("ID")), session);
ItemFields itemFields = new ItemFields(component.Content, component.Schema);
IEnumerable<ComponentLinkField> ie = itemFields.OfType<EmbeddedSchemaField>().OfType<ComponentLinkField>();
for (IEnumerator<ComponentLinkField> e = ie.GetEnumerator(); e.MoveNext(); ) {
Component linkedComponent = e.Current.Value;
}
Linqを使用すると、フィールド構造をすばやくナビゲートして結果を得ることができます。これにより、第3レベルのコンポーネントリンクが提供されます。もちろん、同じものを使用して構造をさらに深く掘り下げることができます。