2012-05-11 15 views
9

Razor TBBからページテンプレートメタデータを読み取ることができるかどうかは知りませんか?残念ながら、これはnull参照の例外がスローされますRazor TBBからページテンプレートメタデータにアクセスする

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

:私は960グリッドシステムを使用して構築されていますし、私のような何かを行うことができるように期待していた私のCTの再利用可能なを維持するために設計を実施しています。

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

+1

私はアレックスがインターネットのこの側面に来るのを見たことがない、私はおそらく彼のブログにそれについて投稿するだろう:http://www.codedweapon.com/ –

+0

ありがとうこのリンクはv1.3の追加機能として計画しているようです – richeym

答えて

5

質問をするアレックスのブログにオーバー見出した後、私は彼がすでにanswered it for someone elseだことを見る:テンプレートメタデータを抜け出すについて

...残念ながら私は は、テンプレート自体にはまだラッパーを作成していません、@今さらさ があるテンプレートを使用すると、昔ながらの 方法からテンプレートフィールドを取得する必要があります今の意味 だけ Tridion.ContentManager.CommunicationManagement.Template 1、次のとおりです。

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

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

0

私は、次のコードを使用してコンポーネントテンプレートメタデータのためにこれを取得することができた:

@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として返されるため、.InnerTextではなく、.Valueであることに注意してください。私のコードでは、「位置」は単なる文字列でした。あなたがタクソノミーを使っているなら、これは違うかもしれないと思います。

おかげで、 ジョナサン

P.S.私は剃刀メディエーターのバージョン1.2を使用しています