Стоимость сборки
Доброго времени суток!
Необходимо: Добавить возможность для покупателя рассчитать и оплатить стоимость сборки приобретаемой мебели. Т.е. при оформлении заказа покупатель перед выбором доставки имеет возможность поставить галочку в пункте "Сборка мебели". Стоимость сборки рассчитывается на основании суммарной стоимости выбранных покупателем позиций - это 5% от суммы заказа (без учета доставки) с округлением вверх до 10 руб (минимальная цена сборки 300руб) В корзине выведен чекбокс (файл "test.php")
<div data-property-id-row="22" class="clearfix">
<label>
<div class="bx_logotype">
<span style="background-image:url(/images/logo-default-d.gif);"></span>
</div>
</label>
<div class="bx_block r1x3 pt8">
<input type="checkbox" id="sbor" onchange="fun1()">
<div class="bx_description">
<?=GetMessage("COST_OF_ASSEMBLY_SUMM")?><span style="font-weight: bold;"> 300</span>
</div>
</div>
</div>
Происходит проверка чекбокса (выбран/не выбран)
<script type="text/javascript">
function fun1() {
var chbox;
chbox=document.getElementById('sbor');
if (chbox.checked) {
//alert('Выбран');
var message;
message = '1';
alert(message);
}
else {
//alert ('Не выбран');
var message;
message = '0';
alert(message);
}
}
</script>
Подскажите, пожалуйста, каким образом возможно записать значение (выбран/ не выбран, т.е. 1/0) в переменную php и далее данную переменную предавать в другой файл (summary.php)? Спасибо. |
Цитата:
|
laimas, спасибо что откликнулись.
Возможно ли показать как на данном примере будет выглядеть? Или примеры на что отталкиваться? Спасибо. |
_marisha,
можно и примеры, скажите только как именно нужно? Ведь если речь идет о переменной хранящейся на сервере, то только передача ее на сервер, клиент тут не помощник. Собственно передать значение некоего поля формы с одной страницы в форму на другой странице можно и через саму форму. |
laimas, как именно нужно, затрудняюсь ответить.
Пробую делать так (найден пример):
function fun1() {
var chbox;
chbox=document.getElementById('sbor');
if (chbox.checked) {
var sbor = '1';
$(document).ready(function(){
$.ajax({
url: "summary.php",
type : "POST",
data : {sbor:sbor},
});
}
else {
//alert ('Не выбран');
var message;
message = '0';
alert(message);
}
}
В summary.php echo $_POST['sbor']; пусто Возможно данный вариант не подходит для решения в данном случае... |
Ошибка в коде - строку 6 удалите (не закрыто тело условия, да и $(document).ready(function() тут совсем ни к чему).
|
laimas,
function fun1() {
var chbox;
chbox=document.getElementById('sbor');
if (chbox.checked) {
var sbor = '1';
$.ajax({
url: "summary.php",
type : "POST",
data : {sbor:sbor},
});
}
else {
var message;
message = '0';
alert(message);
}
}
В summary.php echo $_POST['sbor']; пусто |
Если сделать так:
function fun1() {
var chbox;
chbox=document.getElementById('sbor');
if (chbox.checked) {
var sbor = '1';
$.ajax({
url: "summary.php",
type : "POST",
data : {sbor:sbor},
success: function (data) {
alert (data);
},
error: function(){
alert ("No PHP script: ");
}
});
}
else {
var message;
message = '0';
alert(message);
}
}
То при отмеченном чекбоксе возвращает "No PHP script: " |
Запрос будет, а ошибку (ответ сервера: статус) нужно анализировать.
|
laimas,
$.ajax({
url: "/sale.order.ajax/.default/summary.php",
data : {sbor:sbor},
type : "POST",
success: function (data) {
alert ("data");
},
error: function(){
alert ("No PHP script: ");
}
});
Извините, не верно был указан путь к файлу. Сейчас срабатывает первое условие alert ("data"); Но если сделать alert (data);, то data пустое значение, т.е. в alert пусто... |
Цитата:
|
Цитата:
|
Цитата:
|
Вложений: 1
Nexus,
При отмеченном чекбоксе строка summary.php (скрин "XHR") |
_marisha, нажмите на "summary.php", появится подробная информация о запросе.
Вам нужна будет вкладка "Response" или "Preview", если сервер json возвращает. |
Вложений: 2
Nexus,
На вкладке "Response" пусто, "Preview" тоже пусто |
_marisha, значит сервер ничего не возвращает.
В этом случае серверу положено возвращать 204 код, не 200. |
_marisha,
вопрос гласит "получить на сервере, чтобы передать на другую страницу". Ajax, это асинхронный запрос, то есть есть основания задержаться на данной странице, но определив выбор, и только потом перейти на другую страницу? |
Вложений: 1
laimas, возможно вопрос мной сформирован не верно.
Оформление заказа происходит в компоненте "sale.order.ajax". В данном компоненте есть файлы: "delivery.php" - отвечает за выбор доставки, "paysystem.php" - отвечает за выбор платежной системы, "summary.php" - где производится расчет суммы заказа (вместе с доставкой, со скидками и тп). Все эти файлы подключаются в "template.php". В "template.php" произведено подключение "test.php", в котором выведен чекбокс и происходит проверка на заполненность чекбокса. Далее, если чекбокс выделен, то необходимо информацию о чекбоксе передать в "summary.php" (т.е. проверить, если чекбокс выделен, то отобразить при оформлении заказа надпись "Сборка" и рядом вывести сумму сборки (скрин "Сборка")) |
_marisha,
это объясняет диспозицию, но не то как должно работать. Можно отдать клиенту форму, где он что-то рассчитывает, затем отправляет ее на delivery.php, выбирает доставку, отправляет на paysystem.php, выбирает оплату и т.д. То есть никаких Ajax и каждый раз запрос новой страницы, а все выбранное пользователем на каждой странице хранится на сервере (последовательное заполнение формы). А можно выбранное в каждой предыдущей форме добавлять с следующую скрытыми полями и оно будет доступно на финишной странице. А можно никуда не переходить и все решить асинхронными запросами с одной страницы, запрашивая отдельные серверные сценарии. |
laimas, все решить асинхронными запросами с одной страницы.
Подскажите, пожалуйста, каким образом возможно реализовать? Поидее, страница то одна (по крайней мере при выборе "службы доставки", "платежной системы"), т.е. адресная строка остается неизменной http://test.ru/order Просто сам компонент собирает информацию из кучи других файлов. |
Цитата:
Можно только гадать. Допустим, что все эти файлы (сервера) содержат элементы формы, которые определяют наборы для выбора оплаты/доставки и пр. В этом случае по адресу http://test.ru/order можно передавать один и тот же параметр запроса, но с различными значениями, которые определяют какой из файлов серверу нужно подключить, чтобы вернуть на запрос клиента эти поля. Клиент получив этот html код добавляет его в форму. А может это json, на основе которого уже клиент добавит в форму поля. Невозможно конкретно ответить на ваш вопрос основываясь на предположениях, а приводить примеры кода на все случаи утомительно. ) |
Доставка же как-то обрабатывается :) :
$clickHandler = "onClick = \"BX('ID_DELIVERY_ID_".$arDelivery["ID"]."').checked=true;submitForm();\"";
?>
<div class="bx_block w100 vertical">
<div class="bx_element">
<input type="radio"
id="ID_DELIVERY_ID_<?= $arDelivery["ID"] ?>"
name="<?=htmlspecialcharsbx($arDelivery["FIELD_NAME"])?>"
value="<?= $arDelivery["ID"] ?>"<?if ($arDelivery["CHECKED"]=="Y") echo " checked";?>
onclick="submitForm();"
/>
<label for="ID_DELIVERY_ID_<?=$arDelivery["ID"]?>" <?=$clickHandler?>>
laimas, В любом случае спасибо за помощь :) |
Этот кусок кода ни о чем никому не скажет. Что значит обрабатывается, если вопрос был как передать и передать далее, ... Можно только заметить, что лишнего в коде предостаточно, и почему то не флажок, а радио кнопка, если только это не одна из.
Не известно, что за сервеные файлы и их назначение, и прочие вопросы, что я выше указывал. А значит и помочь вам никто не сможет. |
| Часовой пояс GMT +3, время: 16:07. |