Umbraco Razor - 创建2个列表,然后确定选择哪个

时间:2013-11-20 20:37:40

标签: razor umbraco

我在Umbraco 4.11.10中有一个树结构,它使用2种不同类型的“Detail Page”节点。一个有日期,一个有非日期“详细页面”节点。我需要确定要显示的列表,具体取决于子节点是否具有doctype为“ListParent”的父节点的date属性。

我能够创建节点列表,但我需要确定要显示的列表。

这是我最终想要的:

父节点1('ListParent'的Doctype)

  • 节点一(非日期)
  • 节点二(非日期)
  • 节点三(非日期)

父节点2('ListParent'的Doctype)

  • 节点一(日期)
  • 节点二(日期)
  • 节点三(日期)

我真的很接近我的代码,但我只需要一些帮助来确定要显示的内容。这是我到目前为止的情况。我只需要IF语句来确定要显示的列表。

非常感谢任何帮助。

@using umbraco.MacroEngines
@inherits umbraco.MacroEngines.DynamicNodeContext

@{

if(@Model.Descendants().NodeTypeAlias == "Event"){@*Not Working*@
    @pageListingSorted()
}
else{
        <P>not sorted</P>
@pageListing()  
 }

}

@helper pageListing(){  
foreach(var item in @Model.Children.Where("!hideFromAllMenus")){
 var listImage = Library.MediaById(item.landingPageImage);
<div class="boxItem grid_4">

      @if(@item.HasValue("landingPageImage")){
        <a href="@item.Url">
        <img src="/imagegen.ashx?width=224&image=@listImage.Url" style="margin-left:-60px" />
        </a>
        <div class="boxButtons"></div>
             if (!String.IsNullOrWhiteSpace(item.buyNowLink))
            {
               <a href="@item.buyNowLink" class="buyNowBtn" title="Buy tickets to @item.Name"  onclick="pageTracker._link('@item.buyNowLink'); return false;">Buy Now</a>
            }

            <a href="@item.Url" class="learnMoreBtn">Learn More</a>
      }
      <h3>
            @if (!String.IsNullOrWhiteSpace(item.altPageTitle))
            {
               <a href="@item.Url"> @item.altPageTitle</a>
            }
            else
            {
               <a href="@item.Url"> @item.Name</a>
            }
        </h3>


    </div>

 }

}
 @*END PAGE LISTING HELPER*@


 @helper pageListingSorted(){
 foreach(var item in   @Model.Children.Where("!hideFromAllMenus").Where("calendarEventDateTime != null").OrderBy("calendarEventDateTime")){
 var listImage = Library.MediaById(item.landingPageImage);
    <div class="boxItem grid_4">

      @if(@item.HasValue("landingPageImage")){
        <a href="@item.Url">
            @*--Added margin negative left for original images - Take out on Live--*@
        <img src="/imagegen.ashx?width=224&image=@listImage.Url" style="margin-left:-60px" />
        </a>
        <div class="boxButtons"></div>
             if (!String.IsNullOrWhiteSpace(item.buyNowLink))
            {
               <a href="@item.buyNowLink" class="buyNowBtn" title="Buy tickets to @item.Name"  onclick="pageTracker._link('@item.buyNowLink'); return false;">Buy Now</a>
            }

            <a href="@item.Url" class="learnMoreBtn">Learn More</a>
      }
      <h3>
            @if (!String.IsNullOrWhiteSpace(item.altPageTitle))
            {
               <a href="@item.Url"> @item.altPageTitle</a>
            }
            else
            {
               <a href="@item.Url"> @item.Name</a>
            }
        </h3>
         @*Event Status*@
        @if (item.soldOut)
        {
            <p class="statusAlert">Sold Out</p>
        }
        else if (item.cancelled)
        {
            <p class="statusAlert">Cancelled</p>
        }
        else if (item.rescheduled)
        {
         <p class="statusAlert">Rescheduled</p>
        }
        else
        {
            <text></text>
        }
         @if (!String.IsNullOrWhiteSpace(item.eventTimeHeader))
        {
            <div class="dateTimeHeader">@item.eventTimeHeader</div>
        } 

    </div>
  }

 }@*END PAGE LISTING SORTED HELPER*@

2 个答案:

答案 0 :(得分:0)

如果你的可排序的孩子是节点类型“事件”(孩子们将目标放在一个级别 - 如果你检查下面的多个级别你只需要使用后代),这应该没问题:

if(@Model.Children().Where(x => x.NodeTypeAlias == "Event").Count() > 0) {
    @pageListingSorted()
}
else{
        <P>not sorted</P>
@pageListing()  
 }

答案 1 :(得分:0)

这是我找到的解决方案。感谢@amelvin直接帮助我。

if(@Model.Children.Where("NodeTypeAlias == \"Event\"").Count() > 0) {
    @pageListingSorted()
}
else{
 <P>not sorted</P>
@pageListing()  
 }