Перейти к содержимому


Проблема Со Скриптом


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 36

#21 Aukvels

Aukvels

    Пользователь

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 28 Август 2013 - 13:18

Просмотр сообщенияmiyako (28 Август 2013 - 13:04) писал:

Немного поправлю Ваш код Выше -
1) Найдите код в шаблоне HTML -
<script type="text/javascript" src="{ASSETS_JS_PATH}jquery.js"></script>
и удалите. У Вас уже загружен он.

2) Удалите код -
<script type="text/javascript" src="{ASSETS_JS_PATH}script.js"></script>

3) В файле main.js найдите код -
image.attr('src', 'i/sprites.png');
и вместо кода -
i/sprites.png
укажите путь до изображения sprites.png, но не {ASSETS_IMAGES_PATH}sprites.png
Загрузите sprites.png в раздел Сайт- Файлы и скопируйте путь до изображения, сгенирированной системой.

4) Сохраните изменения. Очистите кэш. И откройте в новой вкладке.

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

Какие нибудь еще идеи?


Немного поэксперементировал: вернул на место код
<script type="text/javascript" src="{ASSETS_JS_PATH}script.js"></script>

после чего заработал слайдер и пошел отсчет таймера, но только в хроме... в мозиле и опере все так же не работает, хотя чистил кэш и куки.
И ошибка JS вернулась.
Не могу понять как все заставить работать, хелп!
---------------------------------
Вместо
var christmas="january 1, "+thischristmasyear+" 0:0:00";
присвоил
var christmas="{GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date("Y-m-d")}";
После этого заработало во всех браузерах, но ошибка присутствует. Как убрать?
---------------------------------------------------------

Интернет експлорер ругается на код в фале main.js:
var context = canvas.getContext('2d'),
Говорит: "Не удалось получить значение свойства "getContext": значением объекта является NULL или он не определен"

Может тут что то надо исправить? Помогите!

Сообщение отредактировал Aukvels: 29 Август 2013 - 08:15


#22 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 30 Август 2013 - 05:12

Данная ошибка по идее возникает из-за того что у вас отсутствует HTML код

<!-- Таймер -->
										 <div class="time">
<em class="clock"></em>
<div class="c-block c-block-3"><div class="bl-inner"><span>5</span></div> <span class="etitle etitle-1">дней</span></div>
<div class="c-block c-block-2"><div class="bl-inner"><span>7</span></div> <span class="etitle etitle-2">часов</span></div>
<div class="c-block c-block-2"><div class="bl-inner"><span>12</span></div> <span class="etitle etitle-3">минут</span></div>
<div class="c-block c-block-2"><div class="bl-inner"><span>45</span></div> <span class="etitle etitle-4">секунд</span></div>
</div>
<!--End Таймер -->

на странице. Чтобы избежать появления ошибки в случае отсутствия данного кода - найдите в main.js

if (document.createElement('canvas').getContext)

и замените на

if (document.createElement('canvas').getContext && $('.bl-inner').length)


#23 Aukvels

Aukvels

    Пользователь

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 30 Август 2013 - 09:07

Огромное спасибо! Все получилось!

#24 Aukvels

Aukvels

    Пользователь

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 12 Сентябрь 2013 - 15:55

Здравствуйте. Решил вывести таймер акции на 1й слайд слайдера на главную. Вывести, то вывел, теперь как его завести?  В идеале хочу, чтобы его можно было заводить отдельной акцией, но не знаю возможно ли это? В шаблоне товар, я смог такое реализовать, а на главной получиться? Вот мой сайт.
И еще сразу вопрос про бирки: Сейчас они выводятся все разом и накладываются друг, на друга через z-index. При медленном соединении они прогружаются по очереди - не красиво. Можно ли прописать какое нибудь условие, чтобы нижние бирки не загружались? Спасибо.

#25 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 13 Сентябрь 2013 - 05:24

Найдите в шаблоне "HTML" код счетчика, а именно строку

var christmas="";

и задайте в данной строке дату окончания акции. Например

var christmas="Aug 9, 2014";

Цитата

И еще сразу вопрос про бирки: Сейчас они выводятся все разом и накладываются друг, на друга через z-index. При медленном соединении они прогружаются по очереди - не красиво. Можно ли прописать какое нибудь условие, чтобы нижние бирки не загружались?

Пожалуйста, опишите ваш вопрос подробнее. Вы хотите чтобы всегда отображалась только одна бирка с максимальной скидкой?

#26 Aukvels

Aukvels

    Пользователь

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 13 Сентябрь 2013 - 09:57

Поскольку счетчик у меня выводится в шаблоне товар в блоке акций, я присвоил значение var christmas="{GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date("Y-m-d")}", для того, чтобы он сам рассчитывал время до конца акции. Чтоб понятней было перейдите сюда.
Если я его заменю на конкретную дату, то на главной заработает, а товаре все слетит (не будет рассчитывать сам).
Я так понимаю, что в моем случае, счетчику на главной неоткуда брать дату, но может быть есть способ привязать его к новой акции с главной страницы. Может быть какой-то код из шаблона акций можно скопировать в шаблон HTML, к примеру? Хотя бы логику действий подскажите, буду пробовать.

По биркам. Вот пример.
Я смог реализовать их только так:
В шаблоне товары
<!-- Скидка на товар -->
{% IF goods.MAX_DISCOUNT > 34 %}
<div class="goodsListItemDiscount35" style="left: 0px;z-index: 9999;position: absolute;">
</div>
{% ENDIF %}
<!-- Скидка на товар -->
{% IF goods.MAX_DISCOUNT > 24 %}
<div class="goodsListItemDiscount25" style="left: 0px;z-index: 8999;position: absolute;">
</div>
{% ENDIF %}
<!-- Скидка на товар -->
{% IF goods.MAX_DISCOUNT > 14 %}
<div class="goodsListItemDiscount15" style="left: 0px;z-index: 7999;position: absolute;">
</div>
{% ENDIF %}
main.css
/* Бирки к акциям */
.goodsListItemDiscount35 {
background-image: url({ASSETS_IMAGES_PATH}35.png);
width: 65px;
height: 65px;
position: relative;
}
.goodsListItemDiscount25 {
background-image: url({ASSETS_IMAGES_PATH}25.png);
width: 65px;
height: 65px;
position: relative;
}
.goodsListItemDiscount15 {
background-image: url({ASSETS_IMAGES_PATH}15.png);
width: 65px;
height: 65px;
position: relative;
}
Только так я смог заставить отображаться соответствующие акциям ярлыки. Единственный минус такого способа, что при медленном соединении бирки прогружаются по очереди, что может сбивать с толку потенциальных покупателей. Т.е. к примеру, сначала на товаре отображается скидка 15%, затем 25% , затем 35%.
Поэтому я хочу, задать условие, чтобы отображался только верхний ярлык. Есть способ реализовать это?

#27 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 14 Сентябрь 2013 - 03:30

1) Вы можете сделать условие вида

var christmas="{% IF GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT %}{GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT | date("Y-m-d")}{% ELSE %}Aug 9, 2014{% ENDIF %}";

На главной странице будет работать дата "Aug 9, 2014" как только станет доступна переменная GOODS_MOD_MAX_DISCOUNT_EXPIRED_AT то дата будет браться уже из этой переменной.

2) Замените ваш код на

<!-- Скидка на товар -->
{% IF goods.MAX_DISCOUNT > 34 %}
<div class="goodsListItemDiscount35" style="left: 0px;z-index: 9999;position: absolute;">
</div>
{% ELSEIF goods.MAX_DISCOUNT > 24 %}
<div class="goodsListItemDiscount25" style="left: 0px;z-index: 8999;position: absolute;">
</div>
{% ELSEIF goods.MAX_DISCOUNT > 14 %}
<div class="goodsListItemDiscount15" style="left: 0px;z-index: 7999;position: absolute;">
</div>
{% ENDIF %}

тогда будет отображаться только одна максимальная скидка.

#28 misha777

misha777

    Пользователь

  • Пользователи
  • PipPip
  • 14 сообщений

Отправлено 15 Сентябрь 2013 - 13:48

Просмотр сообщенияVaccina (24 Октябрь 2011 - 14:30) писал:

Думаю проблему можно решить только используя cookies браузера.

Попробуйте использовать

<script language="JavaScript" type="text/javascript">
if($.cookie('target_date').length) {
TargetDate = $.cookie('target_date');
}
else {
TargetDate = new Date();
$.cookie('target_date', TargetDate);
}
CountActive = true;
CountStepper = -1;
LeadingZero = true;

DisplayFormat = "<span class='countdown_schet'>%%D%%:%%H%%:%%M%%:%%S%%</span>";
FinishMessage = "Time's Up";
function calcage(secs, num1, num2) {
s = ((Math.floor(secs/num1))%num2).toString();
if (LeadingZero && s.length < 2)
s = "0" + s;
return s;
}
function CountBack(secs) {
if (secs < 100) {
var new_date = new Date();
$.cookie('target_date', new_date.setDate(new_date.getDate() + 3));
//document.getElementById("clockJS").innerHTML = FinishMessage;
return;
}
DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));
document.getElementById("clockJS").innerHTML = DisplayStr;
if (CountActive)
setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
}
CountStepper = Math.ceil(CountStepper);
if (CountStepper == 0)
CountActive = false;
var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
var dthen = new Date(TargetDate);
var dnow = new Date();
if(CountStepper>0)
ddiff = new Date(dnow-dthen);
else
ddiff = new Date(dthen-dnow);
gsecs = Math.floor(ddiff.valueOf()/1000);
CountBack(gsecs);
</script>

так же вам понадобиться добавить библиотеку http://saintist.ru/2.../jquery-cookie/
добавьте её в шаблоне "HTML" перед подключением файла main.js
Не совсем понятно, как использовать cookies браузера. Можете объяснить подробнее? Спасибо.

#29 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 17 Сентябрь 2013 - 02:45

В данном коде что вы приводите уже все реализовано. По сути имелось в виду использование

if($.cookie('target_date').length) {
TargetDate = $.cookie('target_date');
}
else {
TargetDate = new Date();
$.cookie('target_date', TargetDate);
}


#30 Anton7m

Anton7m

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 27 Октябрь 2013 - 16:20

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

#31 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 29 Октябрь 2013 - 03:42

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

#32 nosferatum44

nosferatum44

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 73 сообщений

Отправлено 17 Ноябрь 2013 - 07:28

Что-то дни не правильно отображаются, больше шести вообще ставить не хочет
<div style="color:#FF0000;font-size:11px;font-family:Trebuchet MS;font-weight:bold;font-style:normal;text-decoration:none" id="countdown1"></div>
<script type="text/javascript">
var strTargetDate = "11/25/2013 12:00 AM";
var strFormat = " $DAYS$ дней, $HOURS$ часов, $MINUTES$ минут, $SECONDS$ секунд";
var strExpired = "Акция закончена";
function doCountDown1(seconds)
{
   if (seconds < 0)
   {
	  document.getElementById("countdown1").innerHTML = strExpired;
	  return;
   }
   var strMsg = strFormat;
   strMsg = strMsg.replace("$WEEKS$",	((Math.floor(seconds/604800))%55).toString());
   strMsg = strMsg.replace("$DAYS$",	((Math.floor(seconds/86400))%7).toString());
   strMsg = strMsg.replace("$HOURS$",   ((Math.floor(seconds/3600))%24).toString());
   strMsg = strMsg.replace("$MINUTES$", ((Math.floor(seconds/60))%60).toString());
   strMsg = strMsg.replace("$SECONDS$",  ((Math.floor(seconds))%60).toString());
   document.getElementById("countdown1").innerHTML = strMsg;
   setTimeout("doCountDown1(" + (seconds-1).toString() + ")", 1000);
}
function initCountDown1()
{
   var dtTarget = new Date(strTargetDate);
   var dtNow = new Date();
   var dtDiff = new Date(dtTarget-dtNow);
   var totalSeconds = Math.floor(dtDiff.valueOf()/1000);
   doCountDown1(totalSeconds);
}
initCountDown1();
</script>


#33 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 19 Ноябрь 2013 - 01:17

Попробуйте код

   strMsg = strMsg.replace("$WEEKS$",   ((Math.floor(seconds/604800))%55).toString());
   strMsg = strMsg.replace("$DAYS$",	((Math.floor(seconds/86400))%7).toString());
   strMsg = strMsg.replace("$HOURS$",   ((Math.floor(seconds/3600))%24).toString());
   strMsg = strMsg.replace("$MINUTES$", ((Math.floor(seconds/60))%60).toString());
   strMsg = strMsg.replace("$SECONDS$",  ((Math.floor(seconds))%60).toString());

заменить на

   strMsg = strMsg.replace("$WEEKS$",   (Math.floor(seconds / 31536000)).toString());
   strMsg = strMsg.replace("$DAYS$",	(Math.floor((seconds % 31536000) / 86400)).toString());
   strMsg = strMsg.replace("$HOURS$",   (Math.floor(((seconds % 31536000) % 86400) / 3600)).toString());
   strMsg = strMsg.replace("$MINUTES$", (Math.floor((((seconds % 31536000) % 86400) % 3600) / 60)).toString());
   strMsg = strMsg.replace("$SECONDS$",  ((((seconds % 31536000) % 86400) % 3600) % 60).toString());


#34 tega4

tega4

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 599 сообщений
  • ГородМосква

Отправлено 01 Март 2014 - 19:14

Аккаунт SL-257549

Вставила счетчик данный:
<!-- Обратный отсчет с автообнулением! -->
		  <span id="clockJS"></span>

		<script language="JavaScript" type="text/javascript">
		TargetDate = "03/04/2014 8:11 PM";
		CountActive = true;
		CountStepper = -1;
		LeadingZero = true;
				  DisplayFormat = "<span class='countdown_schet'>%%D%%:%%H%%:%%M%%:%%S%%</span>";
		FinishMessage = "Time's Up";
		function calcage(secs, num1, num2) {
		  s = ((Math.floor(secs/num1))%num2).toString();
		  if (LeadingZero && s.length < 2)
				s = "0" + s;
		  return s;
		}
		function CountBack(secs) {
		  if (secs < 0) {
				document.getElementById("clockJS").innerHTML = FinishMessage;
				return;
		  }
		  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
		  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
		  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
		  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));
		  document.getElementById("clockJS").innerHTML = DisplayStr;
		  if (CountActive)
				setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
		}
		CountStepper = Math.ceil(CountStepper);
		if (CountStepper == 0)
		  CountActive = false;
		var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
		var dthen	   = new Date(TargetDate);
		var dnow		= new Date();
		if(CountStepper>0)
		  ddiff = new Date(dnow-dthen);
		else
		  ddiff = new Date(dthen-dnow);
		gsecs = Math.floor(ddiff.valueOf()/1000);
		CountBack(gsecs);
		</script>
и добавила и подключила js файл, который рекомендовали на первой странице для циклического таймера. jquery.cookie.js
Если ставить тот код, который предлагали для замены, то счетчик вообще не отображается....
<script language="JavaScript" type="text/javascript">
				if($.cookie('target_date').length) {
				 TargetDate = $.cookie('target_date');
				}
				else {
				 TargetDate = new Date();
				 $.cookie('target_date', TargetDate);
				}
				CountActive = true;
				CountStepper = -1;
				LeadingZero = true;
				  DisplayFormat = "<span class='countdown_schet'>%%D%%:%%H%%:%%M%%:%%S%%</span>";
				FinishMessage = "Time's Up";
				function calcage(secs, num1, num2) {
				  s = ((Math.floor(secs/num1))%num2).toString();
				  if (LeadingZero && s.length < 2)
						s = "0" + s;
				  return s;
				}
				function CountBack(secs) {
				  if (secs < 100) {
						var new_date = new Date();
						$.cookie('target_date', new_date.setDate(new_date.getDate() + 3));
						//document.getElementById("clockJS").innerHTML = FinishMessage;
						return;
				  }
				  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
				  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
				  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
				  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));
				  document.getElementById("clockJS").innerHTML = DisplayStr;
				  if (CountActive)
						setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
				}
				CountStepper = Math.ceil(CountStepper);
				if (CountStepper == 0)
				  CountActive = false;
				var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
				var dthen		  = new Date(TargetDate);
				var dnow				= new Date();
				if(CountStepper>0)
				  ddiff = new Date(dnow-dthen);
				else
				  ddiff = new Date(dthen-dnow);
				gsecs = Math.floor(ddiff.valueOf()/1000);
				CountBack(gsecs);
				</script>


#35 tega4

tega4

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 599 сообщений
  • ГородМосква

Отправлено 03 Март 2014 - 12:04

Ап.

#36 tega4

tega4

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 599 сообщений
  • ГородМосква

Отправлено 04 Март 2014 - 18:57

Подниму тему

#37 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 05 Март 2014 - 01:01

Пожалуйста, опишите суть вашей проблемы подробнее. У вас не отображается счетчик? На данный момент на аккаунте 257549 не доступен подключенный файл jquery.cookie.js. Вам необходимо данный файл загрузить в раздел редактора шаблонов.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных