Сортировка запроса по счетчику просмотров

Я хочу сделать проекцию, которая сортирует некоторые страницы в зависимости от количества просмотров пользователем. Итак, я установил модуль голосования, а затем модуль счетчика просмотров контента. Я включил последний, и мне удалось отобразить счетчик просмотров на каждой странице. Но когда я пытаюсь сделать запрос, который сортируется на основе количества количество просмотров в списке запросов нет такого параметра. Итак, как я могу отсортировать запрос на основе количества просмотров? Есть ли способ сделать количество просмотров сортируемым?

P.S Моя первая мысль — добавить на свои страницы новое поле со значением счетчика просмотров.


person g bas    schedule 07.03.2013    source источник


Ответы (2)


В разделе «Запросы» щелкните вкладку «Привязки», затем добавьте привязку для счетчика голосования. Как только это будет сделано, вы сможете добавить счетчик в качестве критерия сортировки.

person Bertrand Le Roy    schedule 07.03.2013
comment
Спасибо за ваш ответ. Однако запрос не дал никаких результатов (может быть, я неправильно использую виджет для голосования?) Как я вижу из трассировки формы, свойство, которое я хочу использовать, - это TotalViews из части User View (которая исходит из содержимого модуль счетчика просмотров), т.е. @Model.ContentItem.Parts[11].TotalViews - person g bas; 08.03.2013
comment
Вы имеете в виду, что запрос не возвращает никаких результатов независимо от того, пытаетесь ли вы сортировать или нет? - person Bertrand Le Roy; 08.03.2013
comment
Запрос не возвращает никаких результатов, когда я добавляю счетчик голосования в качестве критерия сортировки. Если я не использую сортировку, он возвращает ожидаемые результаты. - person g bas; 10.03.2013
comment
Действительно ли типы для этих результатов имеют голосующую часть? - person Bertrand Le Roy; 10.03.2013
comment
Тип контента, который я хочу отсортировать, имеет часть просмотра пользователем (это из модуля счетчика просмотра контента, который зависит от голосования). Для части прямого голосования нет опции. - person g bas; 11.03.2013
comment
Тогда вы не сможете запросить его, если не создадите свой собственный поставщик сортировки. - person Bertrand Le Roy; 11.03.2013
comment
Еще раз спасибо за вашу помощь. Наконец-то мне удалось найти решение. Может быть, оно не самое лучшее, но оно работает. Я запишу его как ответ. Если какие-либо замечания, пожалуйста :) - person g bas; 11.03.2013

Чтобы иметь возможность сортировать запрос по 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) Измените наш класс обработчика, чтобы указать, что IRepository UserViewRecord должен использоваться в качестве хранилища для этой части.

 public UserViewPartHandler(IVotingService votingService,
        IOrchardServices orchardServices, IRepository<UserViewRecord> repository)
    {
        _votingService = votingService;
        _orchardServices = orchardServices;
        Filters.Add(StorageFilter.For(repository)); 
        //more code
        //more code

     }

В конце концов, как сказал Бертран Ле Руа, мы можем добавить привязку к свойству TotalViews и использовать TotalViews в качестве критерия сортировки.

person g bas    schedule 11.03.2013