Последовательная смена баннеров в BannerY
Здравствуйте. Подскажите пожалуйста, не «догоняю» как нормально сделать последовательную (не случайную) смену банера после перезагрузки страницы.
Если использовать такой код
то банеры меняются в случайном порядке, а нужно последовательно:
перезагрузили страницу — баннер 1,
перезагрузили страницу — баннер 2,
перезагрузили страницу — баннер 1,
перезагрузили страницу — баннер 2,
…
Если последнее посещение страницы или сайта в целом было закончено на баннер 1, то следующий появится баннер 2
Как я понимаю из коробки этого нет. А при реализации нужна привязка к чему-то для определения какой банер был последним.
Есть HitsPage, думаю можно проверять просмотры на четные нечетные, но в какую сторону копать для реализации или есть более оптимальное решение? Кто сталкивался?
Если использовать такой код
[[!BannerY? &position=`3` &limit=`1` &sortby=`RAND()`]]
то банеры меняются в случайном порядке, а нужно последовательно:
перезагрузили страницу — баннер 1,
перезагрузили страницу — баннер 2,
перезагрузили страницу — баннер 1,
перезагрузили страницу — баннер 2,
…
Если последнее посещение страницы или сайта в целом было закончено на баннер 1, то следующий появится баннер 2
Как я понимаю из коробки этого нет. А при реализации нужна привязка к чему-то для определения какой банер был последним.
Есть HitsPage, думаю можно проверять просмотры на четные нечетные, но в какую сторону копать для реализации или есть более оптимальное решение? Кто сталкивался?
Комментарии: 2
Написать свой сниппет, который будет записывать данные в сессию и исходя из этого формировать результат для сниппета. Допустим:
В чанке (баннера) вызываем сниппет, который будет записывать в сессию idx баннера:
А в вызове BannerY допишем параметр &offset=`[[!getBannerPosition]]`, чтобы отображать еще не просмотренный баннер.
Можно также расширить сниппет, чтобы при $_SESSION['lastviewed'] == [[+banner.total]] — сбрасывать значение сессии, но, думаю, с этим уже проблем не возникнет.
В чанке (баннера) вызываем сниппет, который будет записывать в сессию idx баннера:
[[!getBannerPosition? &mode=`write` &idx=`[[+idx]]`]]
<?php
if ($mode == 'write') {
$_SESSION['lastviewed'] = $idx;
}
else {
$offset = $_SESSION['lastviewed'];
if (empty($offset)) {
return '0';
}
else {
return $offset;
}
}
А в вызове BannerY допишем параметр &offset=`[[!getBannerPosition]]`, чтобы отображать еще не просмотренный баннер.
Можно также расширить сниппет, чтобы при $_SESSION['lastviewed'] == [[+banner.total]] — сбрасывать значение сессии, но, думаю, с этим уже проблем не возникнет.
Спасибо, пошел разбираться.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.