2017-03-21 40 views
0

我在Umbraco v6.2.4中使用了部分视图,这是拉取相关文章的列表。下面的脚本完美地工作,并使用“Refactored.Umbraco.MVCExtensions”来提取文章的查看次数。到目前为止这么好,但我想根据最受欢迎的文章命令/排序文章列表,即基于查看次数。但是,视图计数不是Umbraco模型的一部分,所以我不知道如何根据这个命令排序/排序列表,或者如果有另一种方法来做到这一点?Umbraco Razor Orderby定制属性

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage 

@using Refactored.UmbracoViewCounter @{

var articles = Model.Content.AncestorOrSelf(4).Children.Where(x => x.IsVisible()).OrderBy("articleCategory, articleDate desc"); 

int pagerank = 1; 
string elementId; 

<div> 
    <p class="h3">Most Popular</p> 

    @foreach (var item in articles.Take(6)) 
    { 
     elementId = "content_" + pagerank.ToString(); 
     <div class="items @elementId"> 
      <span class="pagerank">@pagerank</span> 
      <a href="@item.Url"> 
       <p>@(item.GetPropertyValue<string>("title"))</p>     
      </a> 
      <span class="views-counter"> @ViewCount.GetViewCount(item.Id, category: "articles", increment: false)</span> 
     </div> 
     pagerank = pagerank + 1; 
    } 

</div> 

}

+0

你能告诉我你是如何保存你的观看次数的吗? –

+0

视图计数存储在名为“dbo.refViewCount”的表中的Umbraco数据库中。该表包含id,nodeId,count,lastViewed和category。 – user3429664

回答

0

您可以使用LINQ到两个列表,然后有点像下面结合起来,什么东西,我假设你正在使用petapoco的观点伯爵表,我由于我没有自定义数据表,所以无法测试代码,但我认为您可以在此处移动到正确的方向:

var db = ApplicationContext.DatabaseContext.Database; 
var sql = new Sql() 
    .Select("*") 
    .From<RefViewCount>(new SqlServerSyntaxProvider()); 

var refViewCountList = db.Query<RefViewCount>(sql); 

var articles = Model.Content.AncestorOrSelf(4).Children.Where(x => x.IsVisible()).Select(r => new {Item = r, ViewCount = refViewCountList.Where(v => v.nodeId == r.Id).Select(v => v.count).SingleOrDefault()}).OrderBy(r => r.ViewCount).ToList(); 
+0

好的,谢谢,我已经试过了,但是我得到了以下错误:无法找到类型或名称空间名称'RefViewCount'(您是否缺少使用指令或程序集引用?) – user3429664

+0

您是否在使用Petapoco或实体框架进行ViewCount表?我只是假设你有叫做RefViewCount的petapoco模型,但它应该是你真正的ViewCount表的类名 –