まったく悪い質問ではありません ジョージ。
コンポーネント テンプレートから div を取り出してページ テンプレートに配置する場合、引数をページ テンプレートからコンポーネント テンプレートに渡す必要はありません。次に、CSS クラスを最初のコンポーネント プレゼンテーションに設定するのは簡単です。
<div class="<!-- TemplateBeginIf cond="TemplateRepeatIndex==0" -->myFirstCssClass<!-- TemplateEndIf -->"></div>
最後のコンポーネント プレゼンテーションでクラスを設定するのは、もう少し楽しく、これを実現する方法がいくつかあります。
- TemplateRepeatCount() などのカスタム Dreamweaver 関数。次に、ページ テンプレート内で次のようなことを行うことができます
<!-- TemplateBeginRepeat name="Components" --><div class="<!-- TemplateBeginIf cond="TemplateRepeatIndex==TemplateRepeatCount()-1" -->lastCssClass<!-- TemplateEndIf -->">@@RenderComponentPresentation()@@</div><!-- TemplateEndRepeat -->
。
- もう 1 つの方法は、コンポーネント プレゼンテーションをカウントアップし、合計数をパッケージにドロップする基本的な TBB を作成することです。これにより、TemplateRepeatIndex をこの数と比較できます。
上記の #1 と #2 の両方について、こちらの記事で説明しています: http://www.tridiondeveloper.com/more-fun-with-dreamweaver-templates-templaterepeatcount
最後に、コンポーネント テンプレートが実際にページのスコープを調べて、それがリスト内の最後のコンポーネント プレゼンテーションであるかどうかを判断する場所を具体的に求めていたものとより一致するアプローチを次に示します。TemplateBuilder でデバッグするのはそれほど簡単ではないため、私のお気に入りではありません (CT を実行しているときは PT がないため、コンポーネントのプレゼンテーション カウントはこのスコープに存在しません)。
public class IsLastCP : TemplateBase
{
private string MY_SCHEMA = "My Component's Schema Title";
public override void Transform(Engine engine, Package package)
{
this.Initialize(engine, package);
//in the page template.
Page page = this.GetPage();
if (page == null)
{
//this TBB is being executed either in Template Builder or a dynamic component presentation.
// so we just don't do anything.
}
else
{
IList<ComponentPresentation> cpList = page.ComponentPresentations;
int cpCount = 0;
int thisCPIndex = -1;
Component thisComponent = this.GetComponent();
foreach (ComponentPresentation cp in cpList)
{
Component comp = cp.Component;
if (comp.Schema.Title == MY_SCHEMA)
{
if (comp.Id.Equals(thisComponent.Id))
thisCPIndex = cpCount;
cpCount++;
}
}
if (thisCPIndex == cpCount-1)
{
package.PushItem("IsLastCP", package.CreateStringItem(ContentType.Text, "true"));
}
}
}
これには、Will の有名な TemplateBase クラスが必要です。これは、SDLTridionWorld から入手できる彼の「便利なビルディング ブロック」拡張機能から取得できます。明らかに、私が提供したコードをスキーマ名などに微調整する必要があります。
この TBB をコンポーネント テンプレートの Dreamweaver TBB の前にドロップし、その出力を次のように使用します。 <!-- TemplateBeginRepeat name="IsLastCP" -->class="myLastCSSClass"<!-- TemplateEndRepeat -->
注: ここで TemplateBeginIf を実行して、IsLastCP で true/false を明示的にチェックする必要はありません。問題の CP が最後にある場合、この変数はパッケージに存在し、TemplateBeginRepeat 句が入ります。