【问题标题】:Using Razor script to randomly pick a page node in Umbraco使用 Razor 脚本在 Umbraco 中随机选择一个页面节点
【发布时间】:2011-10-07 13:47:42
【问题描述】:

以下代码在http://www.keelycattschoolofdance.co.uk 的主页上显示了一个推荐项,效果很好:

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

@{ 
var numberOfItems = 1;
DynamicNodeList pages = @Model.Children.Where("umbracoNaviHide !=    true").Take(numberOfItems).OrderBy("UpdateDate");
}

<div>
    @foreach (DynamicNode page in pages)
    {        
       <h2>@page.Name</h2>
       <p>@page.GetProperty("introText")</p>
       <p><a href="@page.Url">Read more...</a></p>
       <p><strong>@page.GetProperty("personsName")</strong></p>                       
    }
</div>

我想通过选择随机推荐来进一步提升这个小脚本。我该怎么做呢?

【问题讨论】:

    标签: macros razor umbraco


    【解决方案1】:

    试试

    var r = new Random();
    var numberOfItems = 1;
    List<DynamicNode> pages = new DynamicNode(Model.Id).Descendants().Items.Where(x => x.Visible).OrderBy(x => r.Next()).Take(numberOfItems).ToList();       
    

    【讨论】:

    • 谢谢,虽然不完全确定它是否有效。这可能是因为目前只有两个项目可以随机化,随着我们添加更多,它可能会更好地工作?
    【解决方案2】:

    我更喜欢使用 Linq 生成随机元数据,然后按它排序的方法。

    IPublishedContent containerNode = Umbraco.TypedContent(1144);
    IPublishedContent randomlySelectedChildNode = containerNode.Children.OrderBy(n => Guid.NewGuid()).FirstOrDefault();
    

    您还可以使用内置的 Umbraco 扩展:

    var randomNode = containerNode.Children.RandomOrder().FirstOrDefault();
    

    【讨论】:

      【解决方案3】:

      试试 ElementAt() Linq 方法:

      Random r = new Random();
      int max = 10;   // set your own max
      
      var items = @Model.Content.AncestorOrSelf(1).Descendants("SomeNode").First().Descendants("SomeChildNode").First().Children;
      var item = items.ElementAt(r.Next(0, max));  // use linq ElementAt to retrieve your random node
      

      【讨论】:

        猜你喜欢
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多