-6

私は、要件に従ってコンポーネント テンプレートとページ テンプレートで使用する一般的な Razor TBB を作成しています。

そのため、ページ テンプレートとコンポーネント テンプレートに TBB を適用すると、カミソリ TBB にページとコンポーネント オブジェクトが必要になります。

ページの特定の領域でページ/コンポーネントのメタデータ フィールド値を表示/使用するという私の要件。

というわけで、メタデータの値にオブジェクトでアクセスしたいのですが、オブジェクトが取得できず、

フランクとの私のコメントもフォローアップしてください.

誰でも私に提案できますか?

4

1 に答える 1

8

Razor メディエーターで利用できる (非常に役立つ) ドキュメントをご覧になりましたか?

これらは、現在のコンポーネントとページにアクセスする例でいっぱいです。わずか 10 秒の検索で、次のフラグメントが得られます。

<body class=”@Page.Metadata.BodyClass”&gt;

<div class=”@Component.Fields.NewsStyle”&gt;

<img src=”@Fields.HeaderImage.ID” alt=”@Fields.HeaderImage.AltText” />

編集:フォローアップのコメントに詳細を追加したようです。バートが提案するようにして、それらの詳細を質問に追加することをお勧めします。それまでの間、ドキュメントの検索にさらに数分お時間をいただきます。

公式ドキュメント (上記でリンクした Word ドキュメント) には、メタデータを処理しているように見える次の例が含まれています。

@foreach (var keyword in Publication.MetaData.SomeKeywordFields) {
    <li>@keyword.Title (@keyword.Id)</li>
}

Razor テンプレートの出力は、パッケージの出力項目になりますしたがって、Razor メディエーターを使用して出力アイテムを処理しても意味がありません。そのためには、通常の C# (フラグメントまたはアセンブリ) TBB を使用することもできます。

別の編集:Razorメディエーターの暗黙的Fieldsな変数は常にコンポーネントフィールドにMetadataマップされ、変数は常にコンポーネントのメタデータフィールドにマップされるようです。便宜上、上記の名前を Google コードの関連するフラグメントにリンクしました。

したがって、次の 2 つのオプションがあるようです。

  1. ページまたはコンポーネントのどちらにいるかを検出し (たとえば、暗黙的Pageな変数が存在するかどうかを確認することによってnull)、あらゆる場所に条件式を含めます ( isInPage ? Page.Metadata : Metadata)
  2. Razor メディエーター コードのこの制限を自分で修正するか、誰かを雇って修正してもらいます
于 2012-08-09T17:33:12.307 に答える