我想做一个投影,根据用户查看次数对一些页面进行排序。所以我安装了投票模块,然后安装了内容视图计数器模块。我启用了后者,并且我设法在每个页面中显示视图计数器。但是当我尝试进行基于数量排序的查询时视图计数查询列表中没有这样的参数。那么如何根据查看次数对查询进行排序?有什么方法可以使查看次数可排序?
PS我的第一个想法是使用视图计数器的值向我的页面添加一个新字段。
我想做一个投影,根据用户查看次数对一些页面进行排序。所以我安装了投票模块,然后安装了内容视图计数器模块。我启用了后者,并且我设法在每个页面中显示视图计数器。但是当我尝试进行基于数量排序的查询时视图计数查询列表中没有这样的参数。那么如何根据查看次数对查询进行排序?有什么方法可以使查看次数可排序?
PS我的第一个想法是使用视图计数器的值向我的页面添加一个新字段。
在查询下,单击绑定选项卡,然后为投票计数器添加绑定。完成后,您应该能够将计数器添加为排序标准。
为了能够按 TotalViews 对查询进行排序,我们必须修改内容视图计数器模块中的一些代码部分。
1)修改模型
public class UserViewRecord : ContentPartRecord
{
public virtual int TotalViews { get; set; }
}
public class UserViewPart : ContentPart<UserViewRecord>
{
[Required]
public int TotalViews
{
get { return Record.TotalViews; }
set { Record.TotalViews = value; }
}
}
实际上,当我们可以存储总视图时,我们会创建一个表。所以我们必须再执行 2 个步骤
2)在migration.cs中添加一些代码
public int UpdateFrom2() {
SchemaBuilder.CreateTable("UserViewRecord", table => table
.ContentPartRecord()
.Column("TotalViews", DbType.Int32)
);
ContentDefinitionManager.AlterPartDefinition(
typeof(UserViewPart).Name, cfg => cfg.Attachable());
return 3;
}
3) 修改我们的处理程序类以指定应使用 UserViewRecord 的 IRepository 作为该部分的存储。
public UserViewPartHandler(IVotingService votingService,
IOrchardServices orchardServices, IRepository<UserViewRecord> repository)
{
_votingService = votingService;
_orchardServices = orchardServices;
Filters.Add(StorageFilter.For(repository));
//more code
//more code
}
毕竟,正如 Bertrand Le Roy 所说,我们可以为 TotalViews 属性添加一个绑定,并使用 TotalViews 作为排序标准。