HTML: как изменить фон моего сайта при каждом посещении? - PullRequest
1 голос
/ 05 июля 2010

Каков наилучший подход для изменения фона моего сайта при каждом посещении?

1) написать код php, загрузить случайный файл css, содержащий свойство background 2) написать код php, генерируя другой HTML (ивключая свойство фона непосредственно в HTML-код 3) что-то еще?

спасибо

Ответы [ 4 ]

1 голос
/ 05 июля 2010

Это можно сделать в препроцессоре переменной page.tpl.php вашей темы .Сохраните случайный стиль в массиве $ _SESSION для повторного использования для всех страниц в одном сеансе пользователя.И добавьте разметку к переменной $head, используемой в шаблоне.

YOURTHEME_preprocess_page(&$variables) {
  $style = $_SESSION['YOURTHEME_background_style'];
  if (!$style) {
    $style = array();
    //Generate your random CSS here
    $style = "background-image: url('bg-". rand(0,10) .".png')";
    $_SESSION['YOURTHEME_background_style'] = $style;
  }
  $variables['head'] .= '<style type="text/css">body {'. implode("\n", $style) .'}</style>';
}

Обычно $head помещается перед $style в шаблоне page.tpl.php, поэтому правила CSS из любого.CSS-файлы переопределят ваше случайное правило.Возможно, вам придется использовать !important в вашем случайном CSS, чтобы избежать этого.

0 голосов
/ 31 августа 2014

Чтобы изменить фоновое изображение при каждой загрузке страницы (хотя это не совсем «посещение»), вы можете использовать модуль Drupal Динамический фон .Для Drupal 7 только ветвь 7.x-2.x содержит опцию для случайной циклической смены фона.Вы должны установить его с:

drush dl dynamic_background-7.x-2.x && drush en dynamic_background

Эта функция также может быть добавлена ​​в ветку 7.x-1.x с патчем и в 6.x-1.х ветка аналогично.

0 голосов
/ 05 июля 2010

Используйте сессионный cookie. Может быть установлен либо через js (на стороне клиента), либо как php (на стороне сервера). Вот пример решения только для js:

<!doctype html>
<html><head><script>

var backgrounds=['foo.png', 'bar.png', 'hahah.png'];

function setBg () {
  var currentBg=readCookie('which_bg');
  if (!currentBg) {
    currentBg=backgrounds[Math.random()*backgrounds.length|0];
    createCookie('which_bg', currentBg);
  }
  document.body.style.backgroundImage='url('+currentBg+')';
}

// from http://www.quirksmode.org/js/cookies.html

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

</script></head>
<body onload="setBg();">
...
</body></html>
0 голосов
/ 05 июля 2010

Я бы, вероятно:

  1. Используйте hook_user op login для определения имени входа и затем сохраните код цвета фона в объекте пользователя.
  2. В вашем шаблоне страницы создайтевстроенный стиль для цвета фона, который использует значение, хранящееся в объекте пользователя.Для анонимных пользователей ничего не нужно делать и по умолчанию они определены в таблице стилей.
...