Как работает этот скрипт?

Unlock
На сайте с 01.08.2004
Offline
719
325

Коллеги, завис на простой вроде бы вещи. Нашел код:

$RotateEveryXDays = 3; // Every 3 days another banner

$banners_array = array
(
'tip1.php',
'tip2.php',
'tip3.php',
'tip4.php',
'tip5.php'
);
$DayNr = time() / 86400; // Get day number (86400 = # seconds per day)
$BannerNr = $DayNr / $RotateEveryXDays; // WHich banner to use for this day
$i = $BannerNr % count($banners_array); // But limit to number of available banners
$banner = $banners_array[$i];
include_once $banner;

Но не понимаю как это работает. Мне нужен вот какой функционал - каждый день недели менять вывод определенной информации.

Т.е. скажем понедельник из файла tip1.php, вторник - tip2.php

Этот код же немного иной функционал имеет? Я не понимаю как это работает. Если выставить $RotateEveryXDays = 1 и файло tip.php будет 7 штук - tip1.php, tip2.php .... tip7.php это отработает так как нужно мне или нет?

Помогите пожалуйста разобраться.

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
edogs software
На сайте с 15.12.2005
Offline
714
#1

Unlock,

Да, отработает как надо.

Но мы бы упростили до

$banners_array = array

(

'tip7.php',

'tip1.php',

'tip2.php',

'tip3.php',

'tip4.php',

'tip5.php',

'tip6.php'

);

$banner='tip'.(1+date("w")).'.php';

просто что бы потом не задаваться вопросом как оно работает и было компактнее, раз у Вас цель именно по дням недели бить.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход.
S
На сайте с 13.10.2014
Offline
147
#2

Эта функция отлично будет работать, если кол-во инклудов не равно семи, а функция edogs будет нормально функционировать только если кол-во баннеров == кол-ву дней недели

S
На сайте с 30.09.2016
Offline
459
#3
Unlock:
Но не понимаю как это работает. Мне нужен вот какой функционал - каждый день недели менять вывод определенной информации.

Этот код меняет баннер каждые 3 дня. То есть 3 дня показывает один баннер, следующие 3 дня другой баннер, потом 3 дня третий баннер, три дня четвёртый - и так по кругу. Если поставить вместо 3 значение 1 - то будет менять каждый день, если 7 баннеров - то каждый день показывается следующий из семи баннеров, по кругу.

---------- Добавлено 24.08.2019 в 21:33 ----------

edogs:
Unlock,
Да, отработает как надо.

Но мы бы упростили до
$banners_array = array
(
'tip7.php',
'tip1.php',
'tip2.php',
'tip3.php',
'tip4.php',
'tip5.php',
'tip6.php'
);
$banner='tip'.(1+date("w")).'.php';
А зачем $banners_array, - на память? Тогда лучше оформить комментарием.

И более наглядно было бы

$banner='tip'.date('N').'.php';

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Unlock
На сайте с 01.08.2004
Offline
719
#4
Sitealert:
Этот код меняет баннер каждые 3 дня. То есть 3 дня показывает один баннер, следующие 3 дня другой баннер, потом 3 дня третий баннер, три дня четвёртый - и так по кругу.

Это вроде бы так и должно быть, но почему тогда при тестирование, когда я менял количество дней, то менялся и номер баннера? Т.е. условно - $RotateEveryXDays = 3 и баннер tip1.php, а если поменять $RotateEveryXDays = 2, то уже будет скажем tip3.php. Вот на этом моменте я поломался.

---------- Добавлено 24.08.2019 в 21:49 ----------

edogs:
Но мы бы упростили до

В смысле это и есть полный код скрипта? Т.е. здесь количество дней никак не задается?

S
На сайте с 30.09.2016
Offline
459
#5
Unlock:
В смысле это и есть полный код скрипта? Т.е. здесь количество дней никак не задается?

Полный код - там одна строчка, присваивающая имени скрипта цифру дня недели. Упрощено именно для случая соответствия 1 день недели = 1 баннер.

Unlock:
Это вроде бы так и должно быть, но почему тогда при тестирование, когда я менял количество дней, то менялся и номер баннера?

Потому что отсчёт дней ведётся от Рождества Юниксова. И Вы попадаете на какой-то случайный день в середине цикла.

K0
На сайте с 16.05.2012
Offline
70
#6
Unlock:
Но не понимаю как это работает

Смотрите кратность в php.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий