Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Ротация шапки по времени

Опубликовано:

Дорогие друзья, кто разбирается в JavaScript - прошу помощи!

 

Тема ротации шапки уже поднималась на этом форуме, но тогда решение не было предложено. Собственно это нужно для того, чтобы сделать 2 шапки: дневную и вечерную, которые будут автоматически менятся в зависимости от времени.

 

Что я предпринял

 

В GlobalTemplate вставил следующий JavaScript + в корень поместил два файла с разными шапками (вечерней и дневной)

 

<script language="JavaScript">
   	<!-- Begin
   	var theImages = new Array() 

   	theImages[0] = '1.jpg'
   	theImages[1] = '2.jpg'

   	var j = 0
   	var p = theImages.length;
   	var preBuffer = new Array()
   	for (i = 0; i < p; i++){
  		preBuffer[i] = new Image()
  		preBuffer[i].src = theImages[i]
}

var h=(new Date()).getHours();
if (h > 21 || h <6)
{whichImage=(1);}
else
{whichImage=(0);}

function showImage(){

   	document.write('<img src="'+theImages[whichImage]+'">');

   	}


	//  End -->
   	</script>

 

И в defaultHeader заменил стандартный вывод шапки на фунцию из скрипта.

 

<a href='{$this->settings['board_url']}' title='{$this->lang->words['go_home']}' rel="home" accesskey='1'>    	<script LANGUAGE="JavaScript">
   	<!-- Begin
   	showImage();
   	//  End -->
   	</script>
   	</a>

 

Всё работает, шапка меняется по времени, как и было задумано. Но, я столкнулся с двумя проблемами:

 

Проблема 1. Шапка отображается только на главной странице форума, а в форумах,подфорумах и темах ее не видно

 

Изначально в defaultHeader была такая строчка

<a href='{$this->settings['board_url']}' title='{$this->lang->words['go_home']}' rel="home" accesskey='1'><img src='{[b]parse replacement=[/b]"logo_img"}' alt='{$this->lang->words['logo']}' /></a>

Подозреваю, что в Java скрипт нужно дописать "parse replacement=", который там отсутствует, но у меня имеются лишь поверхностные знания в программировании, суть понимаю, но синтаксисом практически не владею. Сколько не пытался дописать в скрипт это выражение - выдаёт синтаксическую ошибку.

 

Очень прошу, специалисты по JavaScript - помогите грамотно вписать выражение. Или проблема вовсе не в этом?

 

Проблема 2. Справа от шапка есть небольшая картинка с именем branding_bg.gif Естественно этот фон отличается у дневной и у вечерней шапки. А вот как сделать ротацию ума не приложу.

Вот, что я пробовал:

 

Добавил в ipb_styles.css

#branding {
background: #e4e4e4 url(http://ipbskins.ru/forum/public/style_images/ipbskins/branding_bg.jpg) repeat-x top;
min-height: 80px;
}
#[b]branding1[/b] {
background: #e4e4e4 url(http://ipbskins.ru/forum/public/style_images/ipbskins/branding_bg1.jpg) repeat-x top;
min-height: 80px;

 

 

Где branding1- это ночной вариант заполняющей картинки.

Далее, в GlobalTemplate попытался дописать вышеуказанный скрипт следующей функцией

 

var theBranding = new Array()
brand[0] = 'branding'
brand[1] = 'branding1'

function showBranding(){
if whichImage="0"
document.write('<div id='+brand[0]+'>');
 	else
document.write('<div id='+brand[1]+'>');
}

 

И в месте вывода заполняющей картинки, в том же шаблоне сделал такое изменение:

 

            	<div id='branding1'>
                   <if test="brandingBar:|:method_exists( $this->registry->output->getTemplate( $this->registry->getCurrentApplication() . '_global' ), 'overwriteHeader' )">
                       {parse template="overwriteHeader" group="{current_app}_global" params=""}
                   <else />
                       {parse template="defaultHeader" group="global" params=""}
                   </if>
               </div>

 

Поменял на:

 

				<script LANGUAGE="JavaScript">showBranding();</script></a>
				<if test="brandingBar:|:method_exists( $this->registry->output->getTemplate( $this->registry->getCurrentApplication() . '_global' ), 'overwriteHeader' )">
					{parse template="overwriteHeader" group="{current_app}_global" params=""}
				<else />
					{parse template="defaultHeader" group="global" params=""}
				</if>
			</div>

 

Но, решение не работает. Видимо по незнанию языка я что-то напутал.

 

Пожалуйста, уделите несколько минут своего времени, помогите разобраться!

Изменено пользователем Volod

Рекомендованные сообщения

Опубликовано:

Восстановить оригинальный код лого, в теге img добавить id='logo'

 

<a href='{$this->settings['board_url']}' title='{$this->lang->words['go_home']}' rel="home" accesskey='1'><img src='{parse replacement="logo_img"}' alt='{$this->lang->words['logo']}' id='logo' /></a>

 

а ниже вставьте такой скрипт

<script type="text/javascript">
var theImages = new Array();
theImages[0] = '1.jpg';
theImages[1] = '2.jpg';

var h=(new Date()).getHours();
if (h > 21 || h <6) {
whichImage=1;
$('branding').setStyle({
	backgroundImage: 'url(http://site.ru/path_to_images/brand1.jpg)'
});
} else {
whichImage=0;
}

$('logo').src = 'http://site.ru/path_to_images/'+theImages[whichImage];
</script>

 

Это сообщение было вынесено в статью

Опубликовано:
  • Автор

Восстановить оригинальный код лого, в теге img добавить id='logo'

 

<a href='{$this->settings['board_url']}' title='{$this->lang->words['go_home']}' rel="home" accesskey='1'><img src='{parse replacement="logo_img"}' alt='{$this->lang->words['logo']}' id='logo' /></a>

 

а ниже вставьте такой скрипт

 

 

Спасибо огромное! Решение полностью рабочее.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.