N2 CMS рейтинг пользовательского контроля - PullRequest
1 голос
/ 03 марта 2009

Я сейчас собираю сайт в рамках N2 CMS. Я хотел сделать так, чтобы пользователи могли оценивать различные элементы сайта с помощью довольно стандартного пользовательского элемента управления в стиле звездного рейтинга или чего-то подобного.

Кто-нибудь, кажется, что-то похожее на это реализовано в N2 специально? Просто ищу несколько советов о том, как лучше всего добиться этого в N2.

Кроме того, не думаю, что это должно иметь значение, но я в настоящее время реализую все это, используя ASP MVC в N2.

Заранее спасибо

Пол

Ответы [ 2 ]

0 голосов
/ 13 декабря 2012

Это то, что я использую на своем сайте для оценки контента - от 1 до 5 звезд

N2CMS - EditableEnum отлично подходит для этой работы

    [EditableEnum("RatingValue", 2, typeof(Rating))]
    public virtual string RatingValue
    {
        get { return (string)(GetDetail("RatingValue")); }
        set { SetDetail("RatingValue", value); }
    }

    /// <summary>
    /// Enum for the Vehicle Review Ratings
    /// </summary>
    public enum Rating
    {
        one = 1,
        two = 2,
        three = 3,
        four = 4,
        five = 5
    }
0 голосов
/ 04 марта 2009

Проверьте исходный код BlogSvc (скоро будет называться AtomServer)

Источник / WebCore / Плагины / Rater / RaterService.cs

Вот фрагмент:

public RaterModel Rate(Id entryId, float rating, User user, string ip)
{
  LogService.Info("RateEntry: {0}, {1}, {2}", entryId, rating, ip);

  if (!AuthorizeService.IsAuthorized(user, entryId, AuthAction.RateEntryOrMedia))
    throw new UserNotAuthorizedException(user.Name, AuthAction.RateEntryOrMedia.ToString());

  if (rating < 1 || rating > 5) throw new ArgumentOutOfRangeException("Rating value must be 1 thru 5.");

  AtomEntry entry = AtomEntryRepository.GetEntry(entryId);
  if (entry.Raters.Contains(ip)) throw new UserAlreadyRatedEntryException(ip, entry.Id.ToString());

  entry.RatingCount++;
  entry.RatingSum += (int)Math.Round(rating); //temporarily force int ratings
  entry.Edited = DateTimeOffset.UtcNow;
  List<string> raters = entry.Raters.ToList();
  raters.Add(ip);
  entry.Raters = raters;
  entry = AtomEntryRepository.UpdateEntry(entry);
  return new RaterModel()
  {
    PostHref = RouteService.RouteUrl("RaterRateEntry", entryId),
    Rating = entry.Rating,
    CanRate = false,
    RatingCount = entry.RatingCount
  };
}
...