9

Razor TBB 内からページ テンプレート メタデータを読み取ることが可能かどうかは誰にもわかりませんか? 私は 960 グリッド システムを使用して構築された設計を実装しており、CT を再利用可能に保つために、次のようなことができるようにしたいと考えていました。

<div class="@Page.Template.Metadata.content_grid">
</div>

残念ながら、これは null 参照例外をスローします。

私が試みていることは可能ですか、またはこの情報をパッケージに追加するためにカスタム TBB を作成する必要がありますか?

4

2 に答える 2

5

質問をするために Alex のブログにアクセスした後、彼はすでに別の誰かのために答えていることがわかりました。

テンプレート メタデータの取得に関しては… 残念ながら、テンプレート自体のラッパーをまだ作成していません。現在公開されている @Template は、ちょうど Tridion.ContentManager.CommunicationManagement.Template のものです。つまり、今のところテンプレートを取得する必要があります。昔ながらの方法でフィールドを作成します。

@{ Tridion.ContentManager.ContentManagement.Fields.ItemFields templateFields = new ContentManager.ContentManagement.Fields.ItemFields(Template.Metadata, Template.MetadataSchema); }

ただし、これを To Do リストに追加したので、バージョン 1.3 で @Template.MetaData.YourField を実行できる便利なラッパーが表示されるはずです。

于 2012-05-11T12:49:52.740 に答える
0

次のコードを使用して、Component Template Metadata でこれを取得できました。

@foreach (var cp in ComponentPresentations) {
    @if (cp.Template.Metadata != null && cp.Template.Metadata["position"] != null){
        @Debug(string.Format("The Component Template position is {0}", cp.Template.Metadata["position"].InnerText))
        @if (cp.Template.Metadata["position"].InnerText.ToLower().Equals("main")){                              
            @cp.RenderComponentPresentation()
        }
    }
}

したがって、次のようなものを使用できるはずだと思います。

@if (Page.Template.Metadata != null && Page.Template.Metadata["content_grid"] != null){
    @Debug(string.Format("The content_grid value is {0}", Page.Template.Metadata["content_grid"].InnerText))
    <div class="@Page.Template.Metadata["content_grid"].InnerText">
    </div>
}

content_grid は xml として返されるため、.Value ではなく .InnerText に注意してください。私のコードでは、「位置」は単なる文字列でした。分類法を使用している場合、これは異なる場合があると思います。

ありがとう、ジョナサン

PS私はRazor Mediatorのバージョン1.2を使用しています

于 2012-07-01T10:28:46.383 に答える