web-dev-qa-db-ja.com

umbracoで現在のページのドキュメントタイプを確認するにはどうすればよいですか?

Umbracoについての非常に単純な質問だと思いますが、現時点では明確な答えはありません。

私はかみそりのテンプレート、標準的なもの、@表示変数といくつかのインラインC#コードを持っています。

私が使用するテンプレートのある時点で:

@Umbraco.RenderMacro("myCustomMacro");

問題はありません。すべてが期待どおりに機能します。

現在、このマクロはすべてのページに挿入されています(マスターテンプレートにあります)が、コンテンツ作成者がページプロパティのチェックボックスを介してオンとオフを切り替えることができるページプロパティがあります。これまでのところ、すべてが完全に機能しています。 。

ただし、特定の「ドキュメントタイプ」については、このコンポーネントを表示する必要があることがわかりました。そのため、そのチェックを実行する方法を見つけようとしています。

今私の心の中で、これは次のようなことをするのと同じくらい簡単なはずです:

@{
  if(CurrentPage.documentType == "someDocTypeAliasHere")
  {
     //Render the macro
  }
  else
  {
     // Render the macro only if the tick box is checked
  }
 }

私が言っているように、これは非常に単純な操作です(またはとにかくそうあるべきだと思います)が、これまでのところ結果が出ていないようです。

これまでに何を試しましたか?

かみそりと@CurrentPage変数に関係することについて言及しているumbracoのすべてのページを読むこととは別に、Iv'eはかみそりのプロパティのチートシートに目を通し、(特に注文):

@CurrentPage.NodeTypeAlias
@CurrentPage.NodeType
@CurrentPage.ContentType
@CurrentPage.DocumentType

そして、それらのさまざまな大文字の組み合わせに加えて、それらが法案に合うかもしれないように見えた他のいくつか。

一貫して、プロパティは存在しないか空であるため、結果を判断するのに役立つ情報はありません。

だから今、数日円を描いて回り、どこにも行かなくなった後、私はここにいることに気づきました。

(注意:これはXSLTの質問を検索したり、子コレクションなどを繰り返したりするものではないため、XSLT、マクロ、ページテンプレートなどを投稿するリクエストは拒否されます。必要なのは、レンダリングされている現在のページのドキュメントタイプを判別する方法。)

乾杯

ショーティ

PS:言及するのを忘れて、私は使用しています

umbraco v 4.11.8(アセンブリバージョン:1.0.4869.17899)

誰かが尋ねた場合に備えて。

11
shawty

nodetypealiasなどのページプロパティにアクセスするために、ページにアクセスするたびに実際にノードを作成する必要があると思います。これを試してみてください。私のサイトにも同じ種類の機能があります http:// rdmonline。 co.uk/ ただし、ページ/セクションに応じて差分メニューリンクが表示されるサイドメニュー。

    @{
        var currentPageID = Model.Id;
        var currentPageNode = Library.NodeById(currentPageID);

        if (currentPageNode.NodeTypeAlias == "someDocTypeAliasHere")
          {
             //Render the macro
          }
          else
          {
             // Render the macro only if the tick box is checked
          }
     }

これがあなたのために働くかどうか私に知らせてください。

8

Umbraco7ではcurrentPageNode.DocumentTypeAliasを使用します

20
user3887964

Umbraco 7.1では次を使用します:@if (@CurrentPage.DocumentTypeAlias == "NewsItem")

13
Leszek P

これはこの投稿とは少し関係ありませんが、Googleを検索するとこの投稿が表示されたので、anoyneがこの問題に対処している場合に備えて共有したいと思いました:Umbraco 7では、特定のタイプのサイトのすべてのコンテンツを取得します:

var articles = CurrentPage.AncestorOrSelf(1).Descendants()
                   .Where("DocumentTypeAlias == \"BlogPost\"").OrderBy("CreateDate desc");
1
Serj Sagan

かみそりビューがUmbraco.Web.Mvc.UmbracoViewPageを継承している場合は、UmbracoHelperを使用することもできます。

@if (UmbracoHelper.AssignedContentItem.DocumentTypeAlias.Equals("NewsItem")) { ... }

特定のDocumentTypeのクエリも簡単です。

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

このコードは、IPublishedContentノードのリストを再帰的に返します。このリストを特定のDocumentType情報とともに使用する場合は、これらのアイテムを特定のタイプにマップする必要があります。それ以外に、IPublishedContentはノードの 基本情報 を提供します。

後で、古いバージョンのUmbracoを使用していることを確認しました。 :)この実装はv7専用です。

0
Marko Jovanov