显示与一种内容类型相关的内容项列表

时间:2013-08-08 14:01:09

标签: orchardcms orchardcms-1.6

使用Orchard 1.6,我设置了一个表单,允许用户上传图像(使用字段)。

我希望用户能够导航到搜索页面(在仪表板上),以便他们搜索与此表单相关的所有上传内容。请记住,此用户将拥有一些权限,因此他们可以访问仪表板(但无法访问“内容”部分,这允许用户搜索所有内容项)。此外,我只希望列出此内容部分的内容项。

我已经设置了一个新控制器和一个视图,因此用户可以访问仪表板上的空白页面。在该函数中,我想显示该内容类型的所有内容项的列表,并包含搜索功能。

麻烦的是,在我使用自己创建的表(例如“供应商”)之前我已经完成了这项工作,如果匹配则使用循环添加到另一个列表,然后显示第二个列表

但是,内容项会作为列保存到自己的contentItemRecord

<Data><AddressPart>
      <Name></Name>
      <AddressLine1></AddressLine1>
      <AddressLine2></AddressLine2>
      <Zipcode></Zipcode>
      <City></City>
      <Country></Country>
      </AddressPart>
</Data>

如何使用它进行搜索?

1 个答案:

答案 0 :(得分:1)

我会使用Orchard HQL API,我发现在需要某种搜索过滤器可能会发生变化的情况下,它非常适合。如果过滤器(如果他们可以按地址或城市搜索 )不改变,我只会使用常规的Orchard API。以下是使用HQL API的示例:

public class ExampleService : IExampleService
        {
            private readonly IContentManager _contentManager;


            public ExampleService
                (
                IContentManager contentManager
                )
            {
                _contentManager = contentManager;
            }

    public IEnumerable<ContentItem>(){
    IHqlQuery query = _contentManager.HqlQuery().ForType("YourContentType");

    //You can also make joins on content parts and set criteria
    Action<IAliasFactory> selector = alias => alias.ContentPartRecord<ExamplePartRecord>();    
    //Put any type of filter you want here, you can use conjunctions as well as disjunctions.
    Action<IHqlExpressionFactory> filter = x => x.IsNotNull("Id");

    query = query.Where(selector,filter);

    return query.List();
    }
}