Показать сообщение отдельно
  #7 (permalink)  
Старый 08.02.2020, 22:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

shiyri, тут надо еще думать как сделать. Например, если при каждом неком событии на открытой странице сайта или по таймеру нужно менять случайно изображение текущего времени года, тогда есть резон это делать на клиенте посредством javascript. В этом случае на клиент нужно передавать массив изображений, но только текущего времени года, изображения всех времен года отдавать ему нет смысла.

Другими словами, еще сервер должен определить что отдавать клиенту. Пусть как написано выше, изображение меняется на странице многократно и будем отдавать клиенту массив. У сервера при этом есть три варианта получения массива изображений:

1) Изображения (их имена и пути к ним) описаны в базе соответственно времени года, то есть одно поле в таблице, это идентификатор времени года (только начиная не с 0, а с 1 - зима, 2 - весна, 3 - лето, 4 - осень). В этом случае запрос к базе по id определенным по текущему времени года вернет изображения как массив, который после json кодирования размещается в тег script.

2) Изображения лежат в каталогах с именами по названию времен года. По определенному времени года, из массива описывающего имена каталогов, выбирается каталог текущего времени года, а из него считываются изображения и помещаются в массив как и в случае 1).

3) Все изображения находятся в одном каталоге, но имеют имена как название времени года плюс нумерация или только номера, где первое/последнее число, это индекс времени года (0 - 4), а через дефис - обычная нумерация, могут быть и имена.

Если на сервере РНР, тогда:

Для случая 1):

//определить время года - это для всех вариантов
$season = date('n') / 3 % 4;
//запрос в базу, пример для mysqli
$q = $mysqli->query('SELECT image FROM season_images WHERE season=' . ($season + 1));
//полученный ответ как массив
$ims = json_encode($q->fetch_all(MYSQLI_NUM));


А на странице где формируется html код ее вставка в тег sript:

<script>var ims=<?=$ims?></script>


Для случая 2):

//каталоги времен года с изображениями
$seasons = ['winter', 'spring', 'summer', 'autumn'];
//определить время года
$season = date('n') / 3 % 4;
//получить изображения каталога
$ims = glob('path/'.$seasons[$season].'/*');


Для случая 3):

Предположим, что имена в одном каталоге хранятся как хххххх-0.jpg, ... хххххх-3.jpg, где x любое количество любых символов.

//определить время года
$season = date('n') / 3 % 4;
//получить изображения времени года
$ims = glob('path/*{-'.$season.'}*', GLOB_BRACE);


Если одно случайное изображение на каждой странице, то серверу можно его сразу и отдать, перемешав массив и выбран из него первое:

//перемешать массив полученных изображений времени года
shuffle($ims);
//взять первое
$img = $ims[0];


Но, для России, к примеру, может быть расхождение макс. в 8 часов, для Камчатки, у них уже весна, а сервер будучи в Москве все предлагает зиму. Но можно получать изображения и в процессе загрузки страницы, асинхронным запросом.

Последний раз редактировалось laimas, 09.02.2020 в 01:29.
Ответить с цитированием