Вы должны изменить функцию ShowContentSpots и:
- изменить код так, что только один элемент извлекается (не все)
- добавить рандомизации при получении одного элемента
быстрое решение было бы:
@if (!string.IsNullOrEmpty(ContentSpotIds))
{
var rand = new Random();
var spotIds = ContentSpotIds.Split(',').Select(f=>new Guid(f));
var spots = Data.Get<Content.ContentSpot>().Where(f=> spotIds.Contains(f.Id)).ToList();
if (spots.Any())
{
var spot = spots[rand.Next(spots.Count)];
<div class="spots">
<div class="spot">
@Html.Raw(spot.Content)
</div>
</div>
}
}
Обратите внимание, что это часть или код функциональной функции. Здесь я добавил:
var rand = new Random();
и модифицировал эту часть:
var spot = spots[rand.Next(spots.Count)];
<div class="spots">
<div class="spot">
@Html.Raw(spot.Content)
</div>
</div>
Это просто быстрый пример. Поэтому, когда вы быстро обновляете страницу, это место может не измениться каждый раз - потому что мы создаем новый случайный объект каждый раз, когда мы ссылаемся на эту страницу.
Чтобы избежать этого, инициализируйте объект Random только один раз и в другом месте и используйте его в этой функции.
Спасибо. Я редактирую только CMS. Как мне добраться до этой функции? – niico
Функции перспективы/Функции бритвы/Контент/ShowContentSpots. Может быть, хорошим подходом было бы создание другой функции Razor, основанной на этом (вы можете выбрать, какую функцию использовать при создании) и поэкспериментировать с этой скопированной функцией :) – wysocki