Как создать вращающиеся рекламные блоки в ASP.NET MVC? - PullRequest
20 голосов
/ 19 февраля 2009

Как бы вы реализовали вращающийся рекламный блок с каждым обновлением страницы, подобно тому, как это делает SO, используя ASP.NET MVC?

Как вы думаете, у них есть переменная сеанса с тем, какой рекламный индекс мы сейчас просматриваем, и циклически ли он каждый запрос или что-то еще?

Ответы [ 5 ]

16 голосов
/ 25 февраля 2009

Я бы использовал OpenX , DART , Менеджер объявлений Google , RightMedia , Рубикон или некоторые другие другой менеджер объявлений.

Однако, если бы я хотел построить его сам как упражнение, я бы:

  1. Создать базу данных таблицы рекламных объявлений
  2. В моем базовом контроллере выберите случайную рекламу в ViewData
  3. Добавьте частичное представление на главную страницу для показа объявления
  4. [Наиболее важно] Используйте версию " кэширования пончиков" Фила Хаака в стиле MVC

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

3 голосов
/ 19 февраля 2009

Я не знаю MVC, но что-то мешает вам использовать элемент управления AdRotator?

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.adrotator.aspx

1 голос
/ 19 февраля 2009

Вы можете просто сгенерировать случайное число и использовать его в качестве ключа массива для рекламы, которую вы хотите отобразить, но вы не сможете обеспечить равномерную экспозицию, и это вызовет много проблем, когда дело доходит до обмена денег. Приложение, которое было создано для этой цели: OpenX . Это обеспечивает действительно всестороннюю статистику, а также позволяет вам установить, сколько каждого объявления должно отображаться, например. Его очень мощные, многие коммерческие сайты используют его для управления своей рекламой.

0 голосов
/ 16 марта 2012

Следующие блоги дадут хороший старт, чтобы начать реализацию Ad Rotator.

1) Следующее есть в ASP.NET, но все еще полностью основано на Jquery и просто.

http://dongavipul.blogspot.in/2011/02/jquery-adrotator-like-aspnet-adrotator.html

2) Ниже приводится реализация метода Helper для ротатора рекламы.

http://weblogs.asp.net/rashid/archive/2009/04/20/adrotator-for-asp-net-mvc.aspx

0 голосов
/ 03 марта 2009

Мне пришлось написать что-то в MVC для взвешенного рекламного контроля, который бы не показывал одно и то же объявление дважды подряд, если это возможно, и в спешке у меня получился ужасный кусок кода, который мог бы послужить вам вдохновением.

Я уверен, что есть много лучших способов сделать это (и я уже знаю случаи, когда это позволяет дублировать, когда это не должно), но за короткое время, которое я потратил на это, он сделал свою работу.

    public List<Ad> GetRandomWeightedAds()
    {
        /* Generate random order list of ads with duplicates for ViewsPerRotation */
        List<Ad> returnList = GetAllAds().SelectMany(s => Enumerable.Repeat(s, s.ViewsPerRotation)).OrderBy(s => Guid.NewGuid()).ToList();
        for (int i = 0; i < returnList.Count - 1; i++) /* Compare all but the last element against subsequent element */
        {
            if (returnList[i].Id == returnList[i + 1].Id)
            {
                /* If next to an identical element try and find a new spot for the subsequent element */
                for (int j = 0; j < returnList.Count; j++)  
                {
                    if (returnList[j].Id != returnList[i].Id /* Don't switch identical element back into same pos*/
                        && (j<i || j == 0 || j-1 == i || returnList[i].Id != returnList[j - 1].Id) /* When moving before current 'i', don't move into a place after an identical element */
                        && (j<i || j == returnList.Count - 1 || j + 1 == i || returnList[i].Id != returnList[j + 1].Id)) /* When moving before current 'i', don't move into a place before an identical element */
                    {
                        returnList[i] = returnList[j];
                        returnList[j] = returnList[i+1]; /* returnList[i+1] == returnList[i] */
                        break;
                    }
                }
            }
        }
        return returnList;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...