我有一个名为"新闻"的内容类型, Title
, Body
, Autoroute
和a TextField
。我有两个问题:
-
通过名为作者的文本字段来计数内容项的价值(不能使用分类学术语)。
-
按日期计算内容项目的总和(从2017-01-01到2017-12-31)
现在,我想在我的内容类型上添加一个count()方法,以便我可以过滤,分类和使用投影。
我该怎么做?
还是您有更好的方法?
谢谢!
我会使用果园ISearchService
。只需将ContentType添加到搜索索引(您可以具有多个索引),然后检查要包含的字段,例如created
和author
。
然后您可以这样搜索并使用ISearchService
的TotalItemCount
属性:
var pager = new Pager(this.OrchardServices.WorkContext.CurrentSite, page, pageSize);
var searchSettingsPart = this.OrchardServices.WorkContext.CurrentSite.As<SearchSettingsPart>();
// Orchard.Search.Services.ISearchService
var searchHits = this.searchService.Search.Query(
searchText,
pager.Page,
pager.PageSize,
searchSettingsPart.FilterCulture,
searchSettingsPart.SearchIndex,
searchSettingsPart.GetSearchFields(searchSettingsPart.SearchIndex),
searchHit => searchHit);
var count = searchHits.TotalItemCount;
就您的内容类型的描述而言,我认为果园已经为投影提供了所有必要的过滤器。
如果您需要特殊的东西,则需要实现自己的FilterProvider。ContentTypesFilter是如何做到这一点的一个很好的例子。