Я пытаюсь сделать что-то немного другое с ротатором баннеров.
Ниже приведен сценарий, который я использую для чтения двух текстовых файлов (хранящихся в моем корневом каталоге с расширениями .db) для чередования баннеров на веб-сайте. Один файл содержит счетчик (FileDB), другой содержит код HTML-баннера (URLDB).
В настоящее время файл URLDB содержит шесть строк HTML-кода для отображения баннеров с гиперссылками.
Следующий скрипт строит массив и последовательно чередует эти баннеры при обновлении страницы, считая от 0 до 5, и делает это отлично:
<?php
define('FILEDB', '/WORKING DIRECTORY/count.db');
define('URLDB', '/WORKING DIRECTORY/url.db');
function readURLS()
{
$fo = fopen(URLDB, 'r');
if( null == $fo )
return false;
$retval = array();
while (($line = fgets($fo)) !== false)
{
$retval[] = $line;
}
return $retval;
}
$list = readURLS();
if( false === $list )
{
echo "No URLs available";
}
else
{
$fo = fopen(FILEDB, 'a+');
$count = (fread($fo, filesize(FILEDB)) + 1) % count($list);
ftruncate($fo, 0);
fwrite($fo, "{$count}");
fclose($fo);
echo $list[$count];
}
?>
На веб-странице, на которой я хочу отображать баннеры, есть восемь заполнителей. Однако у меня есть только шесть баннеров.
Вот код PHP в каждом из заполнителей:
Placeholder 1: <?php echo $list[$count];?>
Placeholder 2: <?php echo $list[$count +1];?>
Placeholder 3: <?php echo $list[$count +2];?>
Placeholder 4: <?php echo $list[$count +3];?>
Placeholder 5: <?php echo $list[$count +4];?>
Placeholder 6: <?php echo $list[$count +5];?>
Placeholder 7: <?php echo $list[$count +6];?>
Placeholder 8: <?php echo $list[$count +7];?>
При нулевом счете 6 баннеров отображаются в заполнителях 1–6, а заполнители 7 и 8 пусты.
При каждом обновлении счетчик увеличивается на единицу, показывая каждый баннер в первом размещенном держателе и перемещая другие баннеры через каждый заполнитель от 5 до 0, но оставляя ранее заполненные заполнители пустыми, пока шестой баннер не окажется в заполнителе один. Затем при следующем обновлении баннеры с 1 по 6 снова отображаются.
Это происходит из-за того, что я жестко запрограммировал значения в каждом заполнителе и, очевидно, пытаюсь сослаться на запись в файле, которая находится за пределами массива, созданного приведенным выше сценарием.
Вы можете увидеть рабочий пример здесь.
Чего я пытаюсь добиться, так это отобразить все баннеры в базе данных URL таким образом, чтобы при отображении последней записи первая запись отображалась в следующем заполнителе (в данном случае это заполнитель 7), а вторая запись отображалась в заполнителе 8. .
Идея состоит в том, что баннеры непрерывно перемещаются через каждый из заполнителей, как вагоны поезда, с каждым обновлением страницы и увеличением счетчика — один следует за другим.
Итак, теперь у вас есть предыстория моего вопроса.
Есть ли способ изменить сценарий, чтобы сохранить в переменной PHP максимальное количество записей в файле/массиве URLDB, а затем добавить условную обработку в заполнители, чтобы проверить, когда счетчик достигает этого максимального значения, и ссылаться на следующее допустимое значение в массиве (т.е. 0), так что баннеры снова перезапускаются в избыточных заполнителях - так здесь не отображаются пустые или пустые заполнители?
Думаю, это может показаться странной просьбой. Но, конечно, я был бы признателен за любые советы о том, как достичь моей цели, основываясь на том, как обстоят дела в настоящее время.