2012-03-26 6 views
3

私は現在、document.cshtmlファイルを上書きしてユーザーの現在の場所に基づいて特定のCSSクラスを適用できるWebサイトを作成しています。オーチャードCMSのDocument.cshtmlの代替手段を使用

  • Document.cshtml
  • ドキュメント-URL-AreaA.cshtml
  • ドキュメント-URL-AreaB.cshtml
  • 私は、次のようなURLの代替を使用しようとしました

  • Document.url-AreaC.cshtml

ただし、URLに基​​づいてDocument.cshtmlを使用するのではなく、Document.cshtmlを使用しているようです。私はこれが意図された目的であることを容易に理解できましたが、上記の機能を実装することが可能かどうかは疑問でした。


私は単純に電流を引っ張るために(文書の)URLの選択肢を使用するのではなく、私は、この分野でいくつかの進歩を遂げている可能性があると考えている、と単純にモデルにフィールドを追加するアップデート

サイトの「エリア」とそのクラスをボディに適用します。 (document.cshtml以内)

@using Orchard.Mvc.Html; 
@using Orchard.UI.Resources; 
@{ 
    RegisterLink(new LinkEntry {Type = "image/x-icon", ...}); 

    string title = Convert.ToString(Model.Title); 
    string siteName = Convert.ToString(WorkContext.CurrentSite.SiteName); 

    //Pull the Area here 
    string area = Model.DesignatedAreaField; 
} 
<!DOCTYPE html> 
<html lang="en" class="static @Html.ClassForPage()"> 
<head> 
    <meta charset="utf-8" /> 
    <title>@Html.Title(title, siteName)</title> 
    @Display(Model.Head) 
</head> 
<body class='@area'> 
//Body goes here 
@Display(Model.Body) 
@Display(Model.Tail) 
</body> 
</html> 

私は、これは以前に示唆したものよりも容易に溶液であってもよいと考えています。しかし、私は実際に文書のモデルからアクセスできるフィールドを配置する最も簡単な方法は何だろうと思っています。

答えて

7

Document.cshtmlはレイアウトシェイプのラッパーです。ラッパーは代替をサポートしていません。選択的にdocument.cshtmlテンプレートを置き換える唯一の方法は、レイアウトシェイプのメタデータのラッパーコレクションから既存のラッパーを削除し、独自のラッパーを追加することです。

しかし、待って...私はあなたがそれをしたいと思う何らかの正当な理由は考えられません。 document.cshtmlの内容は、サイト全体で同じでなければならないボイラープレートHTMLです。あなたのアップデートに記載されている解決方法があります。

+0

ありがとうBertrand。私は上記の「領域」を設定しようといくつかの試みを試みましたが、動作させることができませんでした。私が行方不明になっていることはありますか?ページにコンテンツフィールドを追加し、Layout.FieldNameとして設定しようとしましたが、string = Layoutを使用してアクセスしようとしました。FieldNameにアクセスできませんでした。助言がありますか? –

+0

右、 '@エリア'はそれをカットしません。 Layout.FieldName = "something"を他の場所から設定すると、 '@ Model.FieldName'は動作します。 –

0

http://weblogs.asp.net/bleroy/archive/2010/12/14/switching-the-layout-in-orchard-cms.aspxをご覧ください。どのように独自の代替案を動的に追加するかを示していますが、ジオロケーションに基づいてモデルやレイアウトにプロパティを追加する場合も同じアプローチが有効です。

OnResultExecuting()内にいくつかのコードを定義して、Modelクラスにプロパティを動的に追加できると思います。それは動的な型のものなので、それを設定できるだけで、特別なものは必要ありません。

1

<body>タグをLayout.cshtmlに移動し、次にLayout.cshtmlの代替URLを使用して<body>'sクラス属性を設定することもできます。