Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Источники значений & в интернет-магазине "

Автор diii3Раздел Шаблоны XSLT

Ответов: 2
Просмотров: 2884
Последний ответ 10 Ноября 2012, 22:04:18
от diii3
Проблема с модулем "Обратная связь-->Шабло&

Автор don_basilioРаздел Настройка системы и модулей

Ответов: 2
Просмотров: 3035
Последний ответ 14 Ноября 2011, 20:13:47
от don_basilio
Добавить в корзину + Заказа в один клик

Автор samРаздел Настройка системы и модулей

Ответов: 9
Просмотров: 3206
Последний ответ 01 Марта 2016, 11:01:31
от Rodogor
Заказа в 1 клик

Автор rellaiРаздел Настройка системы и модулей

Ответов: 54
Просмотров: 23908
Последний ответ 29 Декабря 2014, 00:46:43
от ilyar
Быстрый заказ от Яндекса + Оформление в один шаг

Автор diii3Раздел Шаблоны XSLT

Ответов: 0
Просмотров: 1931
Последний ответ 15 Ноября 2012, 23:41:00
от diii3

0 Пользователей и 1 Гость просматривают эту тему.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Заказ в "1 клик" - basket.js
« : 29 Января 2015, 19:59:10 »
Вопрос 1: Кто подскажет, по какой причине Ajax не рисует div class="overlay" для всплывающего окна (стили в css есть, да и скрипт вроде правильный)?
Вопрос 2: И почему кнопка "продолжить" в заказе в "1 клик" не закрывает всплывающее окно:

Код для первого вопроса:
site.basket.oneClick = function(id, form) {
var option = $(form).find('input[type="radio"]:checked');
var optional;
if (option.length > 0) {
optional = '?' + option.attr('name') + '=' + $(form).find('input[type="radio"]:checked').val()
} else {
optional = '';
}

var locale = location.pathname;
var lang = locale.substring(1,locale.substring(1).indexOf('/')+1);

jQuery.ajax({
url: '/udata/emarket/createForm/emarket-purchase-oneclick?transform=modules/catalog/one-click.xsl&lang=' + lang,
dataType: 'html',
success: function (data) {
site.message({
id: 'one_click_popup_' + id,
header: 'Заказ в "1 клик"',
width: 380,
content: data,
async: false
});
var form = jQuery('form.buyer_data');
form.attr('action', form.attr('action') + 'element/' + id + '.xml' + optional)
form.append('<table cellpadding="15" style="margin-top: -5px;"><tr><td></td><td align="right"><input type="submit" class="button2" value="' + 'Отправить' + '" /></td></tr></table>');
form.submit(function() {
var xml = site.basket.sendForm(form).responseXML;

form.closest('.content').find('.error').remove();
$(xml).find('error').each(
function() {
form.closest('div').prepend('<div class="error">' + $(this).text() + '</div>');
}
);

form.closest('.content').find('.success').remove();
if ($(xml).find('orderId').length > 0) {
site.basket.replace('all');
form.closest('div').prepend('<div class="success"><div><p>' + 'Заказ ' + '<strong>№' + $(xml).find('orderId').eq(0).text() + '</strong>' + ' успешно оформлен! <br/> Ожидайте звонка от менеджера нашего магазина.' + '</p></div><a class="button big close">' + 'Продолжить' + '</a></div>');
form.remove();
}

return false;
});
}
});
}

Код для второго вопроса:
site.basket.list = function(link) {
var oneClick = false;
var id = (link.id.indexOf('add_basket') != -1) ? link.id.replace(/^add_basket_/, '') : false;
if (!id) {
oneClick = true;
id = (link.id.indexOf('one_click') != -1) ? link.id.replace(/^one_click_/, '') : link;
}
if (!id) return false;
if (jQuery(link).hasClass('options_true')) {
var url = '/upage//' + id + '?transform=modules/catalog/popup-add-options.xsl';
if (oneClick) {
url = '/upage//' + id + '?transform=modules/catalog/popup-add-options-oneclick.xsl';
}
if (jQuery('#add_options_' + id).length == 0) {
jQuery.ajax({
url: url,
dataType: 'html',
success: function (data) {
site.message({
id: 'add_options_' + id,
header: 'Выбор опций',
width: 380,
content: data,
async: false
});
var form = jQuery('form.options');
form.append('<input type="submit" class="button2" value="' + 'Добавить' + '" />');
form.submit(function() {
if (!site.basket.is_cart && !oneClick) {
site.basket.add(id, this, true);
} else if (!site.basket.is_cart && oneClick) {
site.basket.oneClick(id, this);
site.message.close(jQuery('#add_options_' + id), jQuery('.overlay'));
}
return false;
});
}
});
}
}
else if(!oneClick) {
this.add(id);
} else {
site.basket.oneClick(id);
}
};
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #1 : 30 Января 2015, 23:16:07 »
Если актуально, скиньте урл где не работает, js проще отлаживать при помощи специальных инструментов))

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #2 : 31 Января 2015, 00:12:06 »
Aisamiery, может лучше поделитесь этими инструментами, подскажете что и где искать, а я уже попробую сделать это сам, т.е. делать отладку? Это, чтобы Вас не обременить.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #3 : 31 Января 2015, 03:18:24 »
Да как то все стандарт - devtools у хрома и firebug у лисы. И как правило хватает. У меня экзотики нету))

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #4 : 01 Февраля 2015, 23:45:55 »
Спасибо за рекомендации! Firebug установил - можете подсказать, как проверить работу скрипта, на странице его вызова, или где именно? Как уже писал ранее, волнует два момента:
1. div class="overlay" не рисуется - это раз;
2. кнопка "продолжить" не закрывает всплывающее окно?!

Буду признателен за развернутый ответ!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #5 : 02 Февраля 2015, 11:36:11 »
Ну как пример http://firebug.ru/js.html

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #6 : 02 Февраля 2015, 11:51:53 »
По поводу что смотреть.
1. Проверить появляется ли overlay в древе DOM, если появляется и для него есть стили, то я бы проверил слои, возможно ваш overlay имеет z-index ниже чем у основного слоя.
Если даже не появляется, то остановить код там, где должен появляться overlay и проанализировать что происходит, что содержится в переменных и так далее.

Так же и по 2 пункту

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #7 : 02 Февраля 2015, 13:33:46 »
По поводу что смотреть.
1. Проверить появляется ли overlay в древе DOM, если появляется и для него есть стили, то я бы проверил слои, возможно ваш overlay имеет z-index ниже чем у основного слоя.
Если даже не появляется, то остановить код там, где должен появляться overlay и проанализировать что происходит, что содержится в переменных и так далее.

Так же и по 2 пункту

1. Не появляется overlay вовсе. В локалпак, если посмотреть в исходник, то там после кода вплывающего окна рисуется <div class="overlay"></div>, а в нашем случае этого нет. Тут ведь только js+ajax с css задействованы, нет?

2. С кнопкой ситуация такая - заказ успешно отправляется, инфо в окне обновляется, а ниже кнопка "продолжить", нажимаю, никаких действий не происходит, и консоль не выводит ошибок?! Это кнопка связана с js и должна закрыть окошко - почему не закрывает, не могу понять?

Коды привел ранее, чтобы посмотрев могли подсказать, в чем может быть проблема?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #8 : 02 Февраля 2015, 18:40:30 »
Смотрел смотрел, так и не высмотрел ))

На самом деле я так не умею, по кусочку js определять ошибки.
Вы же понимаете, если у вас ошибка/кофликт/подставьте свое, где то выше по коду, то ниже код может отваливаться? Вы же понимаете, что код js к элементам древа DOM привязан при помощи id и классов, которых к сожалению тут нет. И причин, на самом деле, может быть миллион ))

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Заказ в "1 клик" - basket.js
« Ответ #9 : 04 Февраля 2015, 12:51:28 »
Решение в скрипте /js/site/message.js (спасибо за подсказку/помощь!):

site.message = function(params) {
var params = typeof(params) == 'object' ? params : {};
var id = params.id || new Date().getTime();
var header = params.header || 'Информация';
var content = params.content || '';
var width = params.width ? params.width + 'px' : 'auto';
var height = params.height ? params.height + 'px' : 'auto';

jQuery("<div/>", {
"id": id,
"class": "infoblock front_popup",
html: "<div class=\"title\" onmousedown=\"jQuery('#" + id + "').draggable({containment: 'document'})\">\
<img src=\"/images/cms/eip/close.png\" alt=\"Закрыть\" title=\"Закрыть\" />\
<h2>" + header + "</h2></div><div class=\"body\" onmousedown=\"jQuery('#" + id + "').draggable('destroy')\">\
<div class=\"in\">" + content + "</div></div>"
}).appendTo("body").parent().append("<div class='overlay'></div>");

var popup = jQuery('#' + id);
popup.css({'width':width, 'height':height});

var leftPosition = (window.document.documentElement.offsetWidth - popup.width()) / 2;
var windowHeight = window.innerHeight || window.document.documentElement.offsetHeight;
var topPosition = jQuery(window.document.documentElement).scrollTop() || jQuery(window.document).scrollTop();
topPosition = topPosition + (windowHeight - popup.height()) / 2;
popup.css({'left':leftPosition  + 'px', 'top':topPosition + 'px'});

jQuery('div.title img', popup).add(('.overlay')).click(function() {
site.message.close(popup, jQuery('.overlay'))
});
jQuery(popup).on('click', 'a.close', function() {
site.message.close(popup, jQuery('.overlay'))
});
var close;
if (close = jQuery('.close', popup)) {
close.click(function() {popup.remove();});
}
};

site.message.close = function(popup, overlay) {
overlay.remove();
popup.remove();
}
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.