H
Holger Dee Assuran
Идея такова - каждому сайту со временем необходима эффективная система ротации и управления баннерами. У меня есть набросок такой системы - общие идеи таковы:
1. Файлы баннеров могут быть трех типов:
1.1. Flash
1.2. GIF
1.3. HTML
2. Все баннеры имеют набор данных:
2.1. Указатель
2.2. Заголовок
2.3. Описание
2.4. Адрес ссылки
3. Для Flash-баннера может быть загружена GIF-заглушка
4. Баннеры привязываются к местам на странице. При этом указываются:
4.1. Место на странице
4.2. Указатель баннера
4.3. Дата начала показа
4.4. Дата конца показа
4.5. Процент показов
4.6. Ограничение числа показов
4.7. Ограничение числа кликов
4.8. Число показов
4.9. Число кликов
Баннеры могут быть привязаны к нескольким местам на странице. Если баннер не привязан ни к одному месту - он не выводится.
5. Каждый баннер может быть привязан к одной или нескольким страницам. При этом указываются:
5.1. Указатель страницы
5.2. Место на странице
5.3. Указатель баннера
5.4. Дата начала показа
5.5. Дата конца показа
5.6. Процент показов
5.7. Ограничение числа показов
5.8. Ограничение числа кликов
5.9. Число показов
5.10 Число кликов
Эти значения полностью перекрывают ограничения связи с местом. Если баннер не привязан ни к одной странице - он выводится на всех страницах.
Понадобится сценарий обеспечивающий загрузку, установки значений и привязки баннеров к местам и страницам. Так же понадобится функция вызываемая из кода страниц с передачей параметра означающего место баннера.
1. Функция ищет в базе привязки баннеров, не привязанных к страницам, к месту на странице
2. Ищет в базе привязки баннеров, привязанных к открытой странице, к месту на странице.
3. Объединяет листы баннеров, перекрывая значения совпадающих элементов первого, значениями второго
4. Перерасчитывает процент показов исходя из условий, что сумма значений процента показов в листе баннеров равна 100 и пропорции после перерасчета должны быть неизменны.
5. Выбирает случайный баннер из листа. Выбор происходит с учетом пересчитанного процента показа.
6. Выводит баннер, учитывая его тип.
Во всей этой системе вроде-бы ничего сложного не наблюдается. Одна загвоздка - выбор случайного баннера с учетом процента показа.
У меня есть одна идейка как это можно реализовать - мне не очень нравится, но сначала расскажу:
1. Каждое место под баннер снабжается счетчиками "показы списка" и "показы баннера"
2. Каждое место на конкретной странице снабжается такими же счетчиками, перекрывающими значения первых
3. При каждой привязке нового баннера к месту и/или странице и при достижении нулевых значений счетчиками "показы списка" - их значение переустанавливается на 100
4. При каждом показе баннера значения счетчиков уменьшаются. Баннеры со счетчиком показов равным 0 - исключаются.
Минус этой идеи в том, что по началу она будет давать примерно одинаковое количество показов для всех баннеров списка. По мере уменьшения счетчиков файлы будут исключаться из обработки и со временем возникнет ситуация, когда все счетчики листа, кроме одного, пусты и на страницу выводится один и тот же баннер. И так до тех пор пока счетчик "показы листа" не достигнет 0 и показы листа не будут пересчитаны. После этого опять будут выводиться все баннеры листа в одинаковых пропорциях.
Может у кого есть идеи как избавиться от этого лага? Или как учесть процент показа другим способом...
ЗЫ: Я описывал кусочек этой идеи в теме "Выбор случайной строки из файла". Думаю тот пост можно убить.
1. Файлы баннеров могут быть трех типов:
1.1. Flash
1.2. GIF
1.3. HTML
2. Все баннеры имеют набор данных:
2.1. Указатель
2.2. Заголовок
2.3. Описание
2.4. Адрес ссылки
3. Для Flash-баннера может быть загружена GIF-заглушка
4. Баннеры привязываются к местам на странице. При этом указываются:
4.1. Место на странице
4.2. Указатель баннера
4.3. Дата начала показа
4.4. Дата конца показа
4.5. Процент показов
4.6. Ограничение числа показов
4.7. Ограничение числа кликов
4.8. Число показов
4.9. Число кликов
Баннеры могут быть привязаны к нескольким местам на странице. Если баннер не привязан ни к одному месту - он не выводится.
5. Каждый баннер может быть привязан к одной или нескольким страницам. При этом указываются:
5.1. Указатель страницы
5.2. Место на странице
5.3. Указатель баннера
5.4. Дата начала показа
5.5. Дата конца показа
5.6. Процент показов
5.7. Ограничение числа показов
5.8. Ограничение числа кликов
5.9. Число показов
5.10 Число кликов
Эти значения полностью перекрывают ограничения связи с местом. Если баннер не привязан ни к одной странице - он выводится на всех страницах.
Понадобится сценарий обеспечивающий загрузку, установки значений и привязки баннеров к местам и страницам. Так же понадобится функция вызываемая из кода страниц с передачей параметра означающего место баннера.
1. Функция ищет в базе привязки баннеров, не привязанных к страницам, к месту на странице
2. Ищет в базе привязки баннеров, привязанных к открытой странице, к месту на странице.
3. Объединяет листы баннеров, перекрывая значения совпадающих элементов первого, значениями второго
4. Перерасчитывает процент показов исходя из условий, что сумма значений процента показов в листе баннеров равна 100 и пропорции после перерасчета должны быть неизменны.
5. Выбирает случайный баннер из листа. Выбор происходит с учетом пересчитанного процента показа.
6. Выводит баннер, учитывая его тип.
Во всей этой системе вроде-бы ничего сложного не наблюдается. Одна загвоздка - выбор случайного баннера с учетом процента показа.
У меня есть одна идейка как это можно реализовать - мне не очень нравится, но сначала расскажу:
1. Каждое место под баннер снабжается счетчиками "показы списка" и "показы баннера"
2. Каждое место на конкретной странице снабжается такими же счетчиками, перекрывающими значения первых
3. При каждой привязке нового баннера к месту и/или странице и при достижении нулевых значений счетчиками "показы списка" - их значение переустанавливается на 100
4. При каждом показе баннера значения счетчиков уменьшаются. Баннеры со счетчиком показов равным 0 - исключаются.
Минус этой идеи в том, что по началу она будет давать примерно одинаковое количество показов для всех баннеров списка. По мере уменьшения счетчиков файлы будут исключаться из обработки и со временем возникнет ситуация, когда все счетчики листа, кроме одного, пусты и на страницу выводится один и тот же баннер. И так до тех пор пока счетчик "показы листа" не достигнет 0 и показы листа не будут пересчитаны. После этого опять будут выводиться все баннеры листа в одинаковых пропорциях.
Может у кого есть идеи как избавиться от этого лага? Или как учесть процент показа другим способом...
ЗЫ: Я описывал кусочек этой идеи в теме "Выбор случайной строки из файла". Думаю тот пост можно убить.