Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Простой ротатор данных (https://javascript.ru/forum/project/75261-prostojj-rotator-dannykh.html)

dr.zoom 18.09.2018 14:22

Цитата:

Сообщение от laimas (Сообщение 494951)
dr.zoom, дело хозяйское, но вы хотите сделать почти такое - есть десятки изображений весом по N мегабайт, которые вы все грузите клиенту ради того, чтобы показать одно. Понятно, что это бесполезная трата ресурсов клиента.

Хотите чтобы клиент определял контент, ну так пусть определяет, а определение, это не выбор среди множества бесполезно загруженного, а асинхронный запрос указанного с сервера. И можете менять его по любому желаемому интервалу.

дело в том, что мне нужно ротировать рекламный блок при каждом обновлении странички и показывать разные материалы, будь то баннер, или код на javascript.

Как это лучше исполнить, я как раз и хочу тут у вас узнать. Помогите с кодом люди добрые :cray:

laimas 18.09.2018 14:25

Цитата:

Сообщение от dr.zoom
дело в том, что мне нужно ротировать рекламный блок при каждом обновлении странички

Это не означает, что эти блоки нужно все грузить клиенту, они как раз должны находиться на сервере. Причем рекламный блок не просто обновляется, там куча условий - число показов за определенное время, приоритеты, место отображения и т.п. А этим как раз заведует не клиент, а сервер.

dr.zoom 18.09.2018 14:37

Цитата:

Сообщение от laimas (Сообщение 494957)
Это не означает, что эти блоки нужно все грузить клиенту, они как раз должны находиться на сервере. Причем рекламный блок не просто обновляется, там куча условий - число показов за определенное время, приоритеты, место отображения и т.п. А этим как раз заведует не клиент, а сервер.

я с вами не спорю, да пусть так и будет. ну а если скрипт будет тянуть одну строку с кодом из файлика data.dat к примеру.

laimas 18.09.2018 14:45

Скрипт клиентский ни из какого файла ничего тянуть не может. В простейшем случае, клиентских усилий может и не потребоваться, если у клиента включены куки. В этом случае при запросе страницы сервер проверяет установлена ли кука у клиента, если нет, то он выводит первый блок (в файле ли он или это базой определяется, не важно, важно что сервер может получать данные любым способом), и устанавливает куку. Если кука установлена, то ее значение увеличивается, сохраняется в куках и уже это значение определяет какой блок выводить.

Что-то более сложное, это уже потребует клиентского сценария.

dr.zoom 18.09.2018 14:51

я извиняюсь за свои скромные познания, точнее их отсутствие. вот ссылка на скрипт http://phphack.ru/seescript/788/

он меня в принципе устраивает, но я буду выводить через <script src="http://Ваш_адрес/rand_js.php?r=1"></script>

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

черт, там кажется все на php (( глянул rand_js.php код (

я извиняюсь за сумбур

laimas 18.09.2018 15:13

Какой язык использует сервер?

Nexus 18.09.2018 19:07

laimas,
Цитата:

Сообщение от laimas
Какой язык использует сервер?

Судя по 15-му комментарию - PHP.

Nexus 18.09.2018 19:09

<?php
//getBanner.php
$visit=isset($_COOKIE['visit'])?(int)$_COOKIE['visit']:0;
$directory=__DIR__.'/banners/';
if(!is_dir($directory))
  throw new \Exсeption("Directory [$directory] not found");

$banners=array_diff(scandir($directory),['.','..']);
$response=$directory.$banners[$visit%count($banners)];
$response=file_get_contents($response);
setcookie('visit',++$visit,time()+365*24*3600,'/');

echo $response;


//banners.js
[].filter.call(document.scripts,function(script){
  return !!script.src && script.src.indexOf('banners.js')>0;
}).forEach(function(script,index){
	if(index)
      return;
  
  var xhr=new XMLHttpRequest();
  xhr.open('GET','/path/to/getBanner.php?'+Math.random(),true);
  xhr.onload=function(){
  	script.insertAdjacentHTML('beforebegin',this.responseText);
  };
  xhr.send();
});


//index.html
<script src="/path/to/banners.js" async></script>


В директории, в которую положите файл "getBanner.php" создайте еще одну директорию с именем "banners", в нее накидайте файлов, контент которых - код вставляемых на страницу баннеров.
1 файл - 1 баннер.
В том месте, где расположите подключение js-скрипта появится код баннера.

PS. Код не тестировал. Вообще.

laimas 18.09.2018 19:38

Цитата:

Сообщение от Nexus
throw new \Exсeption("Directory [$directory] not found");

Для кого? :)

Цитата:

Сообщение от Nexus
$banners=array_diff(scandir($directory),['.','..']);

glob()

А использование кук вообще исключает клиента, сервер сразу может вывести следующий баннер, зачем все эти навороты на JS?

Nexus 18.09.2018 20:04

Цитата:

Сообщение от laimas
Для кого?

Для обработчика ошибок или самого сервера.
Цитата:

Сообщение от laimas
А использование кук вообще исключает клиента, сервер сразу может вывести следующий баннер, зачем все эти навороты на JS?

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

Вы можете предложить ТС вариант без js.


Часовой пояс GMT +3, время: 04:22.