php Интернет-магазин(неразобрано)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php Интернет-магазин(неразобрано)相关的知识,希望对你有一定的参考价值。
Общие сведения
1) В системную таблицу "Пользователи" необходимо добавить поле "Phone".2) Необходимы компоненты "Товар", "Корзина", "Пункт самовывоза", "Заказ", "Заказ оформлен".3) В файле AddTemplate.html компонента "Заказ" необходимо настроить ID группы пользователей, ID особых методов доставки, ID компонента где хранятся пункты самовывоза.4) Должны быть способы доставки и оплаты (минимум по одному).5) Должны быть способы доставки: "Самовывоз" и "Доставка курьером". ID этих методов записать как написано в пункте (3).
Последовательность действий
1. Создание компонента "Товар"
2. Создание компонента "Корзина"
3) Создание компонента "Заказ"
4) Создание компонента "Заказ оформлен"
5) Создание компонента "Пункт самовывоза"
6) Создание разделов с компонентами "Товар"
7) Создание раздела "Заказы"
Создаём раздел "Заказы".Выключаем.Ключевое слово: "orders".Прикрепляем одноименный компонент.Меняем ID компонента в разделе на "order", вместо "orders".
8) Создание раздела "Заказ оформлен"
Создаем раздел "Заказ оформлен", дочерний для раздела "Заказы".Ключевое слово: "added".Прикрепляем одноименный компонент.
9) Настраиваем интернет-магазин в настройках модуля
Указываем компонент "Заказ" в настройках.
Добавляем валюты.Добавляем методы доставки.Добавляем методы оплаты.
Компоненты и файлы
_CDN
В файл /_cdn/order/city.php необходимо запихнуть содержимое:
<?php
//###############
//#Подключалочки#
//###############
require_once $_SERVER['DOCUMENT_ROOT'].'/netcat/connect_io.php';
//##############
//#Основной код#
//##############
// Запрашиваемый город
$city = $x_db->escape($x_post->city);
// Найдём в базе
$id = $x_db->query_cell("SELECT `Region_ID` FROM `Classificator_Region` WHERE `Region_Name`='$city'");
// Если нет - добавим
if (empty($id)) {
$x_db->query("INSERT INTO `Classificator_Region` (`Region_Name`,`Checked`,`Value`) VALUES ('$city','1','GENERATED')");
$id = $x_db->last_insert_id();
}
// Вернём ID города
exit($id);
?>
Товар
Убедиться в том, что товары, выводимые на фронте, обёрнуты в форму.
Settings.html
$nc_core = nc_Core::get_object();
$nc_netshop = nc_netshop::get_instance();
RecordTemplate.html
<?php $nc_item = new nc_netshop_item($res[$f_RowNum]); ?>
<form action="<?= $nc_netshop->get_add_to_cart_url(); ?>" method="post">
<input type="hidden" name="redirect_url" value="<?= nc_message_link($nc_item['Message_ID'], $nc_item['Class_ID']); ?>">
<input type="hidden" name="cart_mode" value="add">
<input type="hidden" name="cart<?= $nc_item['RowID']; ?>" value="1">
<button type="button" class="button-add-item-to-cart">Добавить в корзину</button>
</form>
RecordTemplateFull.html
<?php $nc_item = new nc_netshop_item($resMsg); ?>
<form action="<?= $nc_netshop->get_add_to_cart_url(); ?>" method="post">
<input type="hidden" name="redirect_url" value="<?= nc_message_link($nc_item['Message_ID'], $nc_item['Class_ID']); ?>">
<input type="hidden" name="cart_mode" value="add">
<input type="number" name="cart<?= $nc_item['RowID']; ?>" value="1">
<button type="button" class="button-add-item-to-cart">Добавить в корзину</button>
</form>
Корзина
FormPrefix.html
<?php if ($has_items): ?>
<style>
.middle {
vertical-align: middle !important;
}
.center {
text-align: center !important;
}
.error {
color: #ae2727;
}
.button-delete-item-from-cart:hover {
cursor: pointer;
color: red;
}
</style>
<?php /* ######################################################################## */ ?>
<?php /* # КОРЗИНА # */ ?>
<?php /* ######################################################################## */ ?>
<h2>1.1 - Корзина</h2>
<form method="post" action="<?= $nc_netshop->get_add_to_cart_url(); ?>" id="form-cart">
<input type="hidden" name="redirect_url" value="<?= $_SERVER["REQUEST_URI"]; ?>"/>
<input type="hidden" name="cart_mode" value="">
<table class="table">
<tr>
<!-- Номер товара -->
<th class="visible-lg visible-md center middle">#</th>
<!-- Фото товара -->
<th class="visible-lg visible-md center">Фото</th>
<!-- Информация о товаре -->
<th>Информация о товаре</th>
<!-- Кол-во товара -->
<th class="visible-lg visible-md">Выбор количества</th>
<!-- Цена товара -->
<th class="visible-lg visible-md">Цена</th>
<!-- Скидка на товар -->
<th class="visible-lg visible-md">Скидка</th>
<!-- Стоимость товара -->
<th>Стоимость</th>
<!-- Кнопка "Удалить из корзины" -->
<th class="visible-lg visible-md center">Удалить</th>
</tr>
<?php foreach ($nc_items as $nc_item):
$nc_item_subdivision_url = nc_folder_path($nc_item['Subdivision_ID']);
$nc_item_subdivision_name = $nc_core->subdivision->get_by_id($nc_item['Subdivision_ID'], 'Subdivision_Name'); ?>
<tr class="cart-item">
<!-- Номер товара -->
<td class="visible-lg visible-md center middle"><?= $nc_items_counter++; ?></td>
<!-- Фото товара -->
<td class="visible-lg visible-md">
<img src="<?= $nc_item['Image']; ?>" class="img-responsive" style="width:125px;"/>
</td>
<!-- Информация о товаре -->
<td class="middle">
<?= $nc_item['ItemID']; ?><br/>
<a href="<?= $nc_item['URL'] ?>"><?= $nc_item['FullName']; ?></a><br/>
<a href="<?= $nc_item_subdivision_url; ?>"><?= $nc_item_subdivision_name; ?></a>
</td>
<!-- Кол-во товара -->
<td style="vertical-align: middle" class="visible-lg visible-md">
<input name="cart<?= $nc_item['RowID'] ?>" type="number" min="1" class="cart-item-name" value="<?= $nc_item['Qty']; ?>" data-units="<?= htmlspecialchars($nc_item['Units']) ?>">
</td>
<!-- Цена товара -->
<td class="middle"><?= $nc_item['OriginalPriceF']; ?></td>
<!-- Скидка на товар -->
<td class="middle"><?= $nc_item['ItemDiscountF']; ?></td>
<!-- Стоимость товара -->
<td class="middle"><?= $nc_item['TotalPriceF']; ?></td>
<!-- Кнопка "Удалить из корзины" -->
<td class="visible-lg visible-md center middle"><i class="fa fa-trash button-delete-item-from-cart" title="Удалить из корзины"></i></td>
</tr>
<?php endforeach;
if ($nc_cart_discount > 0): ?>
<tr>
<!-- Номер товара -->
<td class="visible-lg visible-md"></td>
<!-- Фото товара -->
<td class="visible-lg visible-md"></td>
<!-- Информация о товаре -->
<td></td>
<!-- Кол-во товара -->
<td class="visible-lg visible-md"></td>
<!-- Цена товара -->
<td class="visible-lg visible-md"></td>
<!-- Скидка на товар -->
<td class="visible-lg visible-md"></td>
<!-- Стоимость товара -->
<td class="lead">
Скидка<br>на корзину:<br/>
<?= $nc_netshop->format_price($nc_cart_discount); ?>
</td>
<!-- Кнопка "Удалить из корзины" -->
<td class="visible-lg visible-md"></td>
</tr>
<?php endif; ?>
<tr>
<!-- Номер товара -->
<td class="visible-lg visible-md"></td>
<!-- Фото товара -->
<td class="visible-lg visible-md"></td>
<!-- Информация о товаре -->
<td></td>
<!-- Кол-во товара -->
<td class="visible-lg visible-md"></td>
<!-- Цена товара -->
<td class="visible-lg visible-md"></td>
<!-- Скидка на товар -->
<td class="visible-lg visible-md"></td>
<!-- Стоимость товара -->
<td class="lead">
Итого:<br/>
<?= $nc_netshop->format_price($nc_cart_total_price); ?>
</td>
<!-- Кнопка "Удалить из корзины" -->
<td class="visible-lg visible-md"></td>
</tr>
</table>
</form>
<?php /* ######################################################################## */ ?>
<?php /* # КУПОНЫ # */ ?>
<?php /* ######################################################################## */ ?>
<h2>1.2 - Купоны</h2>
<div class="row">
<form method="post" class="col-md-12">
<!-- Ошибка добавления купона -->
<span class="error"><?= $nc_coupons_error_text; ?></span>
<!-- Примененные купоны -->
<?php if (count($nc_coupons)): ?>
<h3>Применённые купоны</h3>
<?php foreach ($nc_coupons as $i => $coupon): ?>
<div>
<span><?= $i + 1; ?>. <?= $coupon['code'] ?></span>
<button type="submit" name="coupon_clear[<?= $i ?>]" class="btn btn-warning btn-sm" value="1">Удалить</button>
</div>
<?php endforeach ?>
<?php endif; ?>
<!-- Добавление купона -->
<h3>Использовать купон</h3>
<input type="text" name="coupon_add" class="form-control" style="width: 300px;">
<button type="submit" class="btn btn-success">Применить купон</button>
</form>
</div>
<?php /* ######################################################################## */ ?>
<?php /* # КНОПКИ # */ ?>
<?php /* ######################################################################## */ ?>
<div class="row">
<div class="col-md-12">
<a href="<?= $nc_core->SUB_FOLDER; ?>/orders/add_order.html" class="btn btn-success pull-right">Оформить заказ</a>
<button type="button" class="btn btn-primary pull-right" style="margin-right: 15px;" id="button-recalculate-cart">Пересчитать корзину</button>
<div class="clearfix"></div>
</div>
</div>
<?php else: ?>
<div class="row">
<div class="col-md-12">
<div>Корзина пуста</div>
</div>
</div>
<?php endif; ?>
<?php /* ######################################################################## */ ?>
<?php /* # СКРИПТ # */ ?>
<?php /* ######################################################################## */ ?>
<script>
$(document).ready(function() {
$('input[type="number"]').styler();
// Отправим форму, чтобы пересчитать корзину
$('#button-recalculate-cart').click(function() {
$('#form-cart').submit();
});
});
</script>
Settings.html
<?php
/*
// Вывод ошибок
ini_set('display_errors',1);
error_reporting(E_ALL);
*/
// #####################
// #ОСНОВНЫЕ ПЕРЕМЕННЫЕ#
// #####################
$nc_core = nc_Core::get_object();
$nc_netshop = nc_netshop::get_instance();
$nc_cart = $nc_netshop->cart;
$nc_input = $nc_core->input;
// ###################
// #ОБРАБОТКА КУПОНОВ#
// ###################
// Ссылка на корзину
$current_link = $_SERVER['HTTP_REFERER'];
// Сбрасываем купон
if ($coupon_clear = $nc_input->fetch_post('coupon_clear')) {
$coupons = $nc_netshop->promotion->get_registered_coupons();
foreach ($coupons as $i => $coupon) {
if ($coupon_clear[$i]) {
$nc_netshop->promotion->unregister_coupon_code($coupon['code']);
}
}
header("Location: $current_link");
exit;
}
// Активирум купон
if ($coupon_add = $nc_input->fetch_post('coupon_add')) {
if ($nc_netshop->promotion->register_coupon_code($coupon_add)) {
ob_end_clean();
header("Location: $current_link");
exit;
}
}
// Ошибка применения купона
$nc_coupons_error_text = $nc_netshop->promotion->get_coupon_notifications();
// Массив применённых купонов
$nc_coupons = $nc_netshop->promotion->get_registered_coupons();
// ###################
// #ПРОЧИЕ ПЕРЕМЕННЫЕ#
// ###################
$nc_items = $nc_cart->get_items();
$nc_items_count = count($nc_items);
$has_items = $nc_items_count > 0;
$nc_items_discount = $nc_items->get_field_sum('TotalDiscount');
$has_items_discount = $nc_items_discount > 0;
$nc_cart_discount = $nc_cart->get_discount_sum();
$has_cart_discount = $nc_cart_discount > 0;
$has_discounts = $has_items_discount || $has_cart_discount;
$nc_cart_total_items_price = $nc_items->sum('TotalPrice');
$nc_cart_total_price = $nc_cart->get_totals();
$nc_items_counter = 1;
?>
Макет дизайна
В нужное место положить файлы FormStyler'a и DaData'ы и в нужном месте подключить скрипты и стили.
Файлы для загрузки:
jquery.formstyler.cssjquery.formstyler.min.jssuggestions.csssuggestions.min.js
<link rel="stylesheet" href="/_cdn/formstyler/jquery.formstyler.css">
<link rel="stylesheet" href="/_cdn/suggestions/suggestions.css">
<script type="text/javascript" src="/_cdn/formstyler/jquery.formstyler.min.js"></script>
<script type="text/javascript" src="/_cdn/suggestions/suggestions.min.js"></script>
Settings.html
Убедиться в том, что есть следующие объекты
$nc_core = nc_Core::get_object();
$nc_netshop = nc_netshop::get_instance();
$nc_cart = $nc_netshop->cart;
$nc_items = $nc_cart->get_items();
$cart_goods_count = $nc_cart->get_item_count(true);
$cart_goods_price = $nc_cart->get_totals();
$cart_goods_price_f = $nc_netshop->format_price($cart_goods_price);
Header.html
В месте где вывод данных о корзине
<!-- =========================== КОРЗИНА =========================== -->
<span class="b-cart">В корзине <span class="b-cart__goods_count"><?= $cart_goods_count; ?></span> <span class="b-cart__goods_count_text"><?= x_plural_form($cart_goods_count, 'товар', 'товара', 'товаров'); ?></span> на сумму <span class="b-cart__goods_price"><?= x_format_price($cart_goods_price); ?></span> <span class="b-cart__goods_price_text"><?= x_plural_form($cart_goods_count, 'рубль', 'рубля', 'рублей'); ?></span></span>
<!-- =========================== ./ КОРЗИНА =========================== -->
<br>
ИЛИ
<br>
<!-- =========================== КОРЗИНА =========================== -->
<span class="b-cart">В корзине <span class="b-cart__goods_count"><?= $cart_goods_count; ?></span> <span class="b-cart__goods_count_text"><?= x_plural_form($cart_goods_count, 'товар', 'товара', 'товаров'); ?></span> на сумму <span class="b-cart__goods_price_f"><?= $cart_goods_price_f; ?></span></span>
<!-- =========================== ./ КОРЗИНА =========================== -->
Footer.html
Вставить код в конец тега body
<div class="modal fade" role="dialog" id="modal-delete-item-from-cart">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h6 class="modal-title">Удаление из корзины</h6>
</div>
<div class="modal-body">
<form method="post" action="<?= $nc_netshop->get_add_to_cart_url(); ?>">
<input type="hidden" name="redirect_url" value="<?= $_SERVER["REQUEST_URI"]; ?>"/>
<input type="hidden" name="cart_mode" value="">
<input type="hidden" name="" value="0" id="modal-delete-item-from-cart-item">
<p>Вы действительно хотите удалить данный товар из корзины?</p>
<input type="submit" class="btn btn-info" value="Удалить">
</form>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="modal-item-added-to-cart">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h6 class="modal-title">Товар добавлен</h6>
</div>
<div class="modal-body">
<p>Ваш товар добавлен в <a href="/cart/">корзину</a>.</p>
<p>Спасибо за покупку!</p>
</div>
</div>
</div>
</div>
Вставить в тег script в самом конце body
$(document).ready(function() {
function pluralForm(itemQuantity, one, two, many) {
itemQuantity = Math.abs(itemQuantity) % 100;
var underHundred = itemQuantity % 10,
result = many;
if (underHundred > 1 && underHundred < 5) { result = two; }
if (underHundred == 1) { result = one; }
if (itemQuantity > 10 && itemQuantity < 20) { result = many; }
return result;
}
function numberFormat(number, decimals, decPoint, thousandsSep) {
var i, j, kw, kd, km;
if( isNaN(decimals = Math.abs(decimals)) ){
decimals = 2;
}
if( decPoint == undefined ){
decPoint = ",";
}
if( thousandsSep == undefined ){
thousandsSep = ".";
}
i = parseInt(number = (+number || 0).toFixed(decimals)) + "";
if( (j = i.length) > 3 ){
j = j % 3;
} else {
j = 0;
}
km = (j ? i.substr(0, j) + thousandsSep : "");
kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousandsSep);
kd = (decimals ? decPoint + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");
return km + kw + kd;
}
function formatPrice(number, digits = 2) {
return numberFormat(number, digits, '.', ' ');
}
$(".button-add-item-to-cart").click(function() {
// Получим форму для отправления
var form = $(this).closest('form');
// Отправим форму серверу
$.ajax({
type: 'POST',
url: form.attr('action'),
data: form.serialize() + '&json=1',
dataType: 'json',
// Обработаем успешное добавление товаров в корзину
success: function(response) {
// Обработка ответа от сервера
var items = response.Items;
// Кол-во товаров и текст
var itemsCount = response.TotalItemCount;
var itemsCountText = pluralForm(itemsCount, 'товар', 'товара', 'товаров');
// Цена на корзину и текст
var itemsPrice = response.TotalItemPrice;
var itemsPriceF = response.TotalItemPriceF;
var itemsPriceText = pluralForm(itemsPrice, 'рубль', 'рубля', 'рублей');
// Обновим элементы на странице
$('.b-cart__goods_count').text(itemsCount);
$('.b-cart__goods_count_text').text(itemsCountText);
$('.b-cart__goods_price').text(formatPrice(itemsPrice));
$('.b-cart__goods_price_text').text(itemsPriceText);
$('.b-cart__goods_price_f').html(itemsPriceF);
// Вызовем модальное окно
$('#modal-item-added-to-cart').modal();
},
// Обработаем ошибки при добавлении
error: function(response) {
alert('Не удалось добавить товар в корзину');
}
});
});
$('.button-delete-item-from-cart').click(function() {
// Получим атрибут name у input поля товара
var cartItemName = $(this).parents('.cart-item').find('input.cart-item-name').attr('name');
// Установим полученное имя в одноимённый атрибут в форме удаления товара в модальном окне
$('#modal-delete-item-from-cart-item').attr('name', cartItemName);
// Вызовем модальное окно
$('#modal-delete-item-from-cart').modal();
});
});
Заказ
AddTemplate.html
<?php /* ######################################################################## */ ?>
<?php /* # НАСТРОЙКИ # */ ?>
<?php /* ######################################################################## */ ?>
<?php
//##############
//#Вывод ошибок#
//##############
/*
ini_set('display_errors',1);
error_reporting(E_ALL);
*/
//######################
//#Глобальные настройки#
//######################
// Определим особенные методы доставки и оплаты, требующие доп. функционала
$delivery_method_pickup_id = 2;
$delivery_method_courier_id = 1;
// Компонент "Пункт самовывоза".
// Должен содержать как минимум поля "Name" и "Address"
$pickup_class_id = 77;
// Группа пользователей "Покупатели"
$buyer_permission_group_id = 8;
//#########
//#Функции#
//#########
// Печатаем ошибку
function print_warning($text) {
ob_start(); ?>
<p style="color:red;"><?= $text; ?></p>
<?php return ob_get_clean();
}
// Печатаем ошибки
function print_warnings($warnings) {
if (empty($warnings)) {
return;
}
foreach ($warnings as $warning) {
echo print_warning($warning);
}
}
// Добавляем ошибку
function add_warning($text) {
global $warnings;
if (!isset($warnings) || empty($text)) {
return;
}
$warnings[]= $text;
}
// Есть ли ошибки?
function has_warnings() {
global $warnings;
return isset($warnings) && !empty($warnings);
}
// Маска для '+7 (999) 999-99-99'
function check_phone($phone) {
return preg_match('/^\+7 \([0-9]{3}\) [0-9]{3}-[0-9]{2}-[0-9]{2}$/', $phone);
}
// Регистрация пользователя
function reg_user($email, $fio, $phone, $permission_group_id) {
global $nc_core;
global $x_url;
// Проверим, юзверь с таким Phone уже есть?
$user_row = new x_Row('User', $phone, 'Phone');
// Прервём скрипт если юзверь с таким Phone уже есть
if ($user_row->has()) {
return;
}
$is_email_generated = false;
// Если передан Email
if (!empty($email)) {
// Проверим, юзверь с таким Email уже есть?
$user_row = new x_Row('User', $email, 'Email');
// Прервём скрипт если юзверь с таким Email уже есть
if ($user_row->has()) {
return;
}
}
// Если Email не передан - найдём свободный email
else {
$row = null;
do {
// Сгенерируем случайный Email
$email = x_gen_rand_str(8).'@gmail.com';
$row = new x_Row('User', $email, 'Email');
} while($row->has());
$is_email_generated = true;
}
// Создаём нового пользователя
$user_row = new x_Row('User', -1, 'User_ID');
// Генерируем пароль
$password = x_gen_rand_str(10);
// Задаём ему характеристики
$date = date('Y-m-d h:i:s');
$user_row->PermissionGroup_ID = $permission_group_id;
$user_row->Login = $email;
$user_row->Password = md5($password);
$user_row->Email = $email;
$user_row->ForumName = $fio;
$user_row->ForumSignature = $email;
$user_row->Phone = $phone;
$user_row->Created = $date;
$user_row->LastUpdated = $date;
$user_row->Checked = 1;
$user_row->Confirmed = 1;
$user_row->save();
// Создаём запись в таблице "Группа пользователя"
$user_group_row = new x_Row('User_Group', -1, 'ID');
$user_group_row->User_ID = $user_row->User_ID;
$user_group_row->PermissionGroup_ID = $permission_group_id;
$user_group_row->save();
// Шлём письмо с данными регистрации
if (!$is_email_generated) {
$subject = 'Регистрация на planetjeans';
$message = <<<EOD
<p>Спасибо за регистрацию на planetjeans!</p>
<p><b>Ваш логин:</b> $email</p>
<p><b>Ваш пароль:</b> $password</p>
<p>С уважением, команда planetjeans.</p>
EOD;
$from_name = $from_email = 'noreply@planetjeans.ru';
x_send_mail($from_name, $email, $subject, $message);
}
// Авторизуем юзверя
$nc_core->user->authorize_by_id($user_row->User_ID);
}
function get_recovery_pass_text_by_field($field, $pass_recovery_url) {
return "Пользователь с таким $field уже есть. Если это действительно Ваш $field - либо авторизуйтесь на вкладке \"Авторизация\", либо <a href=\"$pass_recovery_url\" style=\"text-decoration: underline;\">восстановите пароль</a>.";
}
//############
//#Переменные#
//############
$nc_core = nc_Core::get_object();
$nc_netshop = nc_netshop::get_instance();
$nc_cart = $nc_netshop->cart;
$nc_input = $nc_core->input;
$user_id = $AUTH_USER_ID;
$is_authorized = $user_id > 0;
$nc_items = $nc_cart->get_items();
$nc_cart_discount = $nc_cart->get_discount_sum();
$nc_cart_total_price = $nc_cart->get_totals();
$nc_items_counter = 1;
$pass_recovery_url = '/netcat/modules/auth/password_recovery.php';
//##########################
//#Методы доставки и оплаты#
//##########################
// Все методы доставки и оплаты
$all_delivery_methods = $nc_netshop->delivery->get_enabled_methods();
$all_payment_methods = $nc_netshop->payment->get_enabled_methods();
// Объект заказа
$nc_order = nc_netshop_order::from_post_data((array)$nc_core->input->fetch_post(), $nc_netshop);
// Контекст для получения подходящих методов доставки и оплаты
$context = $nc_netshop->get_condition_context();
$context->set_order($nc_order);
// Доступные методы доставки и оплаты
$delivery_methods = $all_delivery_methods->matching($context);
$payment_methods = $all_payment_methods->matching($context);
// Выбранные методы доставки и оплаты
$delivery_method_id = $nc_input->fetch_post('f_DeliveryMethod');
$payment_method_id = $nc_input->fetch_post('f_PaymentMethod');
// Если не выбраны ещё - примем первый метод за выбранный
$delivery_method_id = !empty($delivery_method_id) ? $delivery_method_id : $delivery_methods[0]->get_id();
$payment_method_id = !empty($payment_method_id) ? $payment_method_id : $payment_methods[0]->get_id();
// Получим выбранный метод доставки
$delivery_method = null;
foreach ($delivery_methods as $method) {
if ($method->get_id() == $delivery_method_id) {
$delivery_method = $method;
break;
}
}
// Получим выбранный метод оплаты
$payment_method = null;
foreach ($payment_methods as $method) {
if ($method->get_id() == $payment_method_id) {
$payment_method = $method;
break;
}
}
// Наценка на выбранный метод доставки
$delivery_method_cost = 0;
$estimate = $delivery_method->get_estimate($nc_order);
if (!$estimate->has_error()) {
$delivery_method_cost = $estimate->get('price');
}
// Наценка на выбранный метод оплаты
$payment_method_cost = 0;
if ($payment_method->evaluate_conditions($context)) {
$payment_method_cost = $payment_method->get_extra_cost($nc_order);
}
// Пункты самовывоза
$pickup_points = $x_db->query(
"SELECT
`Message_ID` AS `id`,
`Name`,
`Address`
FROM
`Message$pickup_class_id`",
'id'
);
// Выбранный метод самовывоза
$pickup_point_id = $nc_input->fetch_post('f_PickupPointID');
// Если не был выбран ранее метод - выберем первый
if (empty($pickup_point_id)) {
$ids = array_keys($pickup_points);
$pickup_point_id = $ids[0];
}
//#####################################################
//#Итоговая цена на корзину и методы доставки и оплаты#
//#####################################################
$total_price = $nc_cart_total_price + $delivery_method_cost + $payment_method_cost;
//################
//#Номера страниц#
//################
$page_user = $page_delivery = $page_payment = $page_confirmation = -1;
$counter = 1;
// Страница пользователя
$page_user = $counter++;
// Страница доставки
$page_delivery = $counter++;
// Страница оплаты
$page_payment = $counter++;
// Страница подтверждения
$page_confirmation = $counter++;
// Итоговое кол-во страниц
$pages_count = $page_confirmation;
// Начальная страница
$start_page = !$is_authorized ? $page_user : $page_delivery;
//##################
//#Названия страниц#
//##################
$pages_names = array();
$pages_names[$page_user] = 'Пользователь';
$pages_names[$page_delivery] = 'Доставка';
$pages_names[$page_payment] = 'Оплата';
$pages_names[$page_confirmation] = 'Подтверждение';
//##################
//#Текущая страница#
//##################
// Нужен ли переход на следующую страницу?
$go_to_next_page = $nc_input->fetch_post('go_to_next_page');
// Нужен ли переход на предыдущую страницу?
$go_to_prev_page = $nc_input->fetch_post('go_to_prev_page');
// Текущая страница
$page = $nc_input->fetch_post('page');
$prev_page = $page;
// Переключение страниц
if ($go_to_next_page) {
$page++;
} else if ($go_to_prev_page) {
$page--;
}
$page = !empty($page) ? $page : $start_page;
//###################
//#Вся бизнес-логика#
//###################
// Массив для ошибок
$warnings = array();
// Обработка событий на страницах
if ($prev_page == $page_user) {
// Получим POST данные с данной страницы
$auth_login = $nc_input->fetch_post('auth_login');
$auth_password = $nc_input->fetch_post('auth_password');
$reg_fio = $nc_input->fetch_post('reg_fio');
$reg_email = $nc_input->fetch_post('reg_email');
$reg_phone = $nc_input->fetch_post('reg_phone');
$anonym_fio = $nc_input->fetch_post('anonym_fio');
$anonym_phone = $nc_input->fetch_post('anonym_phone');
$is_auth = !empty($auth_login) || !empty($auth_password);
$is_reg = !empty($reg_fio) || !empty($reg_email) || !empty($reg_phone);
$is_anonym = !empty($anonym_fio) || !empty($anonym_phone);
$is_anything = $is_auth || $is_reg || $is_anonym;
if (!$is_anything) {
add_warning('Нельзя проложить оформление, не заполнено ни одно поле!');
} else {
// Авторизуем пользователя?
if ($is_auth) {
if (empty($auth_login)) {
add_warning('Поле "Логин" не может быть пустым.');
}
if (empty($auth_password)) {
add_warning('Поле "Пароль" не может быть пустым.');
}
// Если ошибок нет - можно авторизовать пользователя по тем данным, что он вписал
if (!has_warnings()) {
// Определим ID пользователя
$user_row = new x_Row('User', $auth_login, 'Email');
// Есть ли юзверь с данным email?
if ($user_row->has()) {
// Админ(1) или Покупатель(6)?
if (in_array($user_row->PermissionGroup_ID, array(1, $buyer_permission_group_id))) {
$auth_password = md5($auth_password);
// Пароль верный?
if (strcmp($user_row->Password, $auth_password) == 0) {
// Авторизуем юзверя
$nc_core->user->authorize_by_id($user_row->User_ID);
} else {
add_warning('Не правильный пароль.');
}
}
} else {
add_warning('Пользователь с таким логином не найден.');
}
}
}
// Регистрируем пользователя?
else if ($is_reg) {
// Валидация fio
if (empty($reg_fio)) {
add_warning('Поле "Ф.И.О." не может быть пустым.');
}
// Валидация Email
if (empty($reg_email)) {
add_warning('Поле "Email" не может быть пустым.');
} else {
// Валидация Email
if (!filter_var($reg_email, FILTER_VALIDATE_EMAIL)) {
add_warning('Поле "Email" имеет не верный формат.');
} else {
// Проверим, вдруг такой юзверь уже есть?
$user_row = new x_Row('User', $reg_email, 'Email');
// Если нет юзверя с таким email - регаем нового
if ($user_row->has()) {
add_warning(get_recovery_pass_text_by_field('"Email"', $pass_recovery_url));
}
}
}
// Валидация Phone
if (empty($reg_phone)) {
add_warning('Поле "Телефон" не может быть пустым.');
} else {
if (!check_phone($reg_phone)) {
add_warning('Поле "Телефон" имеет не верный формат.');
} else {
// Проверим, вдруг такой юзверь уже есть?
$user_row = new x_Row('User', $reg_phone, 'Phone');
// Если нет юзверя с таким Phone - регаем нового
if ($user_row->has()) {
add_warning(get_recovery_pass_text_by_field('"Телефон"', $pass_recovery_url));
}
}
}
// Если ошибок нет - можно регистрировать пользователя
if (!has_warnings()) {
reg_user($reg_email, $reg_fio, $reg_phone, $buyer_permission_group_id);
}
}
// Пользователь решил быть без регистрации?
else if ($is_anonym) {
// Валидация fio
if (empty($anonym_fio)) {
add_warning('Поле "Ф.И.О." не может быть пустым.');
}
// Валидация Phone
if (empty($anonym_phone)) {
add_warning('Поле "Телефон" не может быть пустым.');
} else {
if (!check_phone($anonym_phone)) {
add_warning('Поле "Телефон" имеет не верный формат.');
} else {
// Проверим, вдруг такой юзверь уже есть?
$user_row = new x_Row('User', $anonym_phone, 'Phone');
// Если нет юзверя с таким Phone - регаем нового
if ($user_row->has()) {
add_warning(get_recovery_pass_text_by_field('"Телефон"', $pass_recovery_url));
}
}
}
// Если ошибок нет - можно регистрировать пользователя
if (!has_warnings()) {
// Всё равно регаем анонимного пользователя - чтобы не было заказов без пользователей
reg_user(null, $anonym_fio, $anonym_phone, $buyer_permission_group_id);
}
}
}
// Если есть ошибки
if (has_warnings()) {
// Не пускаем дальше
$page = $prev_page;
// Почистим данные
if ($is_auth) {
$is_reg = $is_anonym = false;
$reg_fio = $reg_email = $reg_phone = null;
$anonym_fio = $anonym_phone = null;
} else if ($is_reg) {
$is_auth = $is_anonym = false;
$auth_login = $auth_password = null;
$anonym_fio = $anonym_phone = null;
} else if ($is_anonym) {
$is_auth = $is_reg = false;
$auth_login = $auth_password = null;
$reg_fio = $reg_email = $reg_phone = null;
}
}
}
if ($prev_page == $page_delivery) {
// Если был выбран метод доставки - "Доставка курьером"
if ($delivery_method_id == $delivery_method_courier_id) {
// Получим POST данные со страницы
$delivery_pickup_address = $nc_input->fetch_post('f_Address');
$delivery_pickup_city = $nc_input->fetch_post('f_City');
$delivery_pickup_zip = $nc_input->fetch_post('f_Zip');
if (empty($delivery_pickup_address)) {
add_warning('Поле "Адрес" не может быть пустым.');
}
if (empty($delivery_pickup_city)) {
add_warning('Поле "Город" не может быть пустым.');
}
if (empty($delivery_pickup_zip)) {
add_warning('Поле "Индекс" не может быть пустым.');
}
// Если есть ошибки
if (has_warnings()) {
// Не пускаем дальше
$page = $prev_page;
}
}
}
?>
<?=$warnText;?>
<form method="post" action="<?= $SUB_FOLDER.$HTTP_ROOT_PATH ?>add.php">
<?php /* ######################################################################## */ ?>
<?php /* # ЧАСТЬ ФОРМЫ, ОБЩАЯ ДЛЯ ВСЕХ СТРАНИЦ # */ ?>
<?php /* ######################################################################## */ ?>
<!-- Hidden поля формы -->
<?= $nc_core->token->get_input(); ?>
<input type="hidden" name="admin_mode" value="<?= $nc_core->admin_mode; ?>"/>
<input type="hidden" name="catalogue" value="<?= $catalogue; ?>"/>
<input type="hidden" name="cc" value="<?= $cc; ?>"/>
<input type="hidden" name="sub" value="<?= $sub; ?>"/>
<input type="hidden" name="posting" value="0"/>
<input type="hidden" name="curPos" value="0"/>
<input type="hidden" name="page" value="<?= $page; ?>"/>
<input type="hidden" name="f_ContactName" value="<?= $current_user['ForumName']; ?>">
<input type="hidden" name="f_Email" value="<?= $current_user['Email']; ?>">
<!-- Сохраним POST параметры в hidden поля, чтобы ничего не потерять -->
<?php if ($page > 1):
// Для каждого POST параметра с префиксом 'f_' или '__' создадим hidden поле
// 'f_*' - Поля компонента NetCat
// '__*' - Поля формы, значение которых нужно сохранять при переходах по страницам
foreach ((array)$nc_core->input->fetch_post() as $key=>$value):
// Не забываем про исключения, например 'f_Parent_Message_ID'
if (strpos($key, 'f_') === 0 || strpos($key, '__') === 0): ?>
<input type="hidden" name="<?= htmlspecialchars($key, ENT_QUOTES); ?>" value="<?= htmlspecialchars($value, ENT_QUOTES); ?>">
<?php endif;
endforeach;
endif; ?>
<!-- Заголовок страницы -->
<h2><?= $pages_names[$page]; ?></h2>
<?php /* ######################################################################## */ ?>
<?php /* # СТРАНИЦА "ПОЛЬЗОВАТЕЛЬ" # */ ?>
<?php /* ######################################################################## */ ?>
<?php if ($page == $page_user):
// По умолчанию - пункт авторизации
$is_auth = !$is_anything ? true : $is_auth; ?>
<ul class="nav nav-tabs user-page-tabs">
<li <?= isset($is_auth) && $is_auth ? ' class="active" ' : ''; ?> ><a data-toggle="tab" href="#auth">Авторизация</a></li>
<li <?= isset($is_reg) && $is_reg ? ' class="active" ' : ''; ?> ><a data-toggle="tab" href="#reg">Регистрация</a></li>
<li <?= isset($is_anonym) && $is_anonym ? ' class="active" ' : ''; ?> ><a data-toggle="tab" href="#anonym">Оформить без регистрации</a></li>
</ul>
<?= print_warnings($warnings); ?>
<div class="tab-content">
<div id="auth" class="tab-pane fade <?= isset($is_auth) && $is_auth ? ' in active ' : ''; ?> ">
<div class="col-md-6">
<h3>Авторизация</h3>
<p>Если вы уже являетесь нашим клиентом, то просим Вас авторизоваться.</p>
<div class="form-group">
<label for="input-auth-login">Логин (Email):</label>
<input type="email" name="auth_login" value="<?= $auth_login; ?>" class="form-control" id="input-auth-login" placeholder="Введите Email">
</div>
<div class="form-group">
<label for="input-auth-password">Пароль:</label>
<input type="password" name="auth_password" value="<?= $auth_password; ?>" class="form-control" id="input-auth-password" placeholder="Введите Ваш пароль">
</div>
<div class="form-group">
<p>Забыли пароль? <a href="<?= $pass_recovery_url; ?>">Восстановить.</a></p>
</div>
</div>
</div>
<div id="reg" class="tab-pane fade <?= isset($is_reg) && $is_reg ? ' in active ' : ''; ?> ">
<div class="col-md-6">
<h3>Регистрация</h3>
<p>Если вы ещё не являетесь нашим клиентом - то самое время им стать! Заполните, пожалуйста, следующие поля.</p>
<div class="form-group">
<label for="input-reg-fio">Ф.И.О.:</label>
<input type="text" name="reg_fio" value="<?= $reg_fio; ?>" class="form-control" id="input-reg-fio" placeholder="Введите Ф.И.О.">
</div>
<div class="form-group">
<label for="input-reg-email">Email:</label>
<input type="email" name="reg_email" value="<?= $reg_email; ?>" class="form-control" id="input-reg-email" placeholder="Введите Email">
</div>
<div class="form-group">
<label for="input-reg-phone">Телефон:</label>
<input type="text" name="reg_phone" value="<?= $reg_phone; ?>" class="form-control phonemask" id="input-reg-phone" placeholder="Введите Ваш номер телефона">
</div>
</div>
</div>
<div id="anonym" class="tab-pane fade <?= isset($is_anonym) && $is_anonym ? ' in active ' : ''; ?> ">
<div class="col-md-6">
<h3>Оформить без регистрации</h3>
<p>Тем не менее, нам необходимы некоторые данные от Вас.</p>
<div class="form-group">
<label for="input-anonym-fio">Ф.И.О.:</label>
<input type="text" name="anonym_fio" value="<?= $anonym_fio; ?>" class="form-control" id="input-anonym-fio" placeholder="Введите Ф.И.О.">
</div>
<div class="form-group">
<label for="input-anonym-phone">Телефон:</label>
<input type="text" name="anonym_phone" value="<?= $anonym_phone; ?>" class="form-control phonemask" id="input-anonym-phone" placeholder="Введите Ваш номер телефона">
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php /* ######################################################################## */ ?>
<?php /* # СТРАНИЦА "ДОСТАВКА" # */ ?>
<?php /* ######################################################################## */ ?>
<?php if ($page == $page_delivery): ?>
<div class="row">
<?= print_warnings($warnings); ?>
<?php
$counter = 0;
foreach ($delivery_methods as $method):
$counter++;
$method_id = $method->get_id();
$method_name = $method->get('name');
$method_description = $method->get('description'); ?>
<label class="col-md-4">
<h2><input type="radio" name="f_DeliveryMethod" value="<?= $method_id; ?>" <?= $method_id == $delivery_method_id ? 'checked' : ''; ?> > <?= $method_name; ?></h2>
<p><?= $method_description; ?></p>
</label>
<!-- Перенос методов в другой div, чтобы не рушить сетку -->
<?php if ($counter == 3): ?>
</div>
<div class="row">
<?php $counter = 0;
endif; ?>
<?php endforeach; ?>
</div>
<div class="row" id="block-delivery-method-pickup" <?= $delivery_method_id != $delivery_method_pickup_id ? 'style="display:none;"' : '' ?> >
<div class="col-md-12">
<br><br><br>
<h3>Самовывоз</h3>
<div class="row">
<?php
$counter = 0;
foreach ($pickup_points as $id=>$data):
$counter++; ?>
<label class="col-md-4">
<h2><input type="radio" name="f_PickupPointID" value="<?= $id; ?>" <?= $id == $pickup_point_id ? 'checked' : ''; ?> > <?= $data['Name']; ?></h2>
<p><?= $data['Address']; ?></p>
</label>
<!-- Перенос методов в другой div, чтобы не рушить сетку -->
<?php if ($counter == 3): ?>
</div>
<div class="row">
<?php $counter = 0;
endif; ?>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="row" id="block-delivery-method-courier" <?= $delivery_method_id != $delivery_method_courier_id ? 'style="display:none;"' : '' ?> >
<div class="col-md-12">
<br><br><br>
<h3>Курьерская доставка</h3>
<!-- Т.к. в текущей вёрстке placeholder'ы очень похожи на значение поля - сделаем их менее заметными -->
<style>
.thin-placeholder::-webkit-input-placeholder {
color: rgba(0, 0, 0, 0.1);
}
.thin-placeholder::-moz-placeholder {
color: rgba(0, 0, 0, 0.1);
}
.thin-placeholder:-ms-input-placeholder {
color: rgba(0, 0, 0, 0.1);
}
.thin-placeholder:-moz-placeholder {
color: rgba(0, 0, 0, 0.1);
}
</style>
<div class="form-group">
<label for="input-delivery-courier-search">Поле для поиска - впишите свой полный адрес:</label>
<input type="text" name="__delivery_courier_search" value="<?= $_POST['__delivery_courier_search']; ?>" class="form-control thin-placeholder" id="input-delivery-courier-search" placeholder="г. Волгоград, ул. им. Менжинского, д. 2, кв. 90">
</div>
<p style="color: #ce0896"><i><b>Внимание!</b> При правильном заполнении поля для поиска остальные <u>поля ниже заполнятся автоматически</u>!</i></p>
<div class="form-group">
<label for="input-delivery-courier-address">Адрес:</label>
<input type="text" name="f_Address" value="<?= $f_Address; ?>" class="form-control thin-placeholder" id="input-delivery-courier-address" placeholder="ул. им. Менжинского, д. 2, кв. 90">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="input-delivery-courier-city">Город:</label>
<input type="hidden" name="f_City" value="<?= $f_City; ?>">
<input type="text" name="__delivery_courier_city" value="<?= $_POST['__delivery_courier_city']; ?>" class="form-control thin-placeholder" id="input-delivery-courier-city" placeholder="Волгоград">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="input-delivery-courier-zip">Индекс:</label>
<input type="text" name="f_Zip" value="<?= $f_Zip; ?>" class="form-control thin-placeholder" id="input-delivery-courier-zip" placeholder="400033">
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="input-delivery-courier-comments">Комментарии к доставке:</label>
<textarea name="f_Comments" class="form-control thin-placeholder" id="input-delivery-courier-comments" placeholder="Введите Ваш комментарий, если Вам есть что сказать..."><?= $f_Comments; ?></textarea>
</div>
</div>
</div>
<?php endif; ?>
<?php /* ######################################################################## */ ?>
<?php /* # СТРАНИЦА "ОПЛАТА" # */ ?>
<?php /* ######################################################################## */ ?>
<?php if ($page == $page_payment): ?>
<div class="row">
<?php
$counter = 0;
foreach ($payment_methods as $method):
$counter++;
$method_id = $method->get_id();
$method_name = $method->get('name');
$method_description = $method->get('description'); ?>
<label class="col-md-4">
<h2><input type="radio" name="f_PaymentMethod" value="<?= $method_id; ?>" <?= $method_id == $payment_method_id ? 'checked' : ''; ?> > <?= $method_name; ?></h2>
<p><?= $method_description; ?></p>
</label>
<!-- Перенос методов в другой div, чтобы не рушить сетку -->
<?php if ($counter == 3): ?>
</div>
<div class="row">
<?php $counter = 0;
endif; ?>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php /* ######################################################################## */ ?>
<?php /* # СТРАНИЦА "ПОДТВЕРЖДЕНИЕ" # */ ?>
<?php /* ######################################################################## */ ?>
<?php if ($page == $page_confirmation): ?>
<style>
.middle {
vertical-align: middle !important;
}
.center {
text-align: center !important;
}
</style>
<!-- ТОВАРЫ В ЗАКАЗЕ -->
<h2>Состав заказа</h2>
<table class="table">
<tr>
<!-- Номер товара -->
<th class="visible-lg visible-md center middle">#</th>
<!-- Фото товара -->
<th class="visible-lg visible-md center">Фото</th>
<!-- Информация о товаре -->
<th>Информация о товаре</th>
<!-- Кол-во товара -->
<th class="visible-lg visible-md">Кол-во</th>
<!-- Цена товара -->
<th class="visible-lg visible-md">Цена</th>
<!-- Скидка на товар -->
<th class="visible-lg visible-md">Скидка</th>
<!-- Стоимость товара -->
<th>Стоимость</th>
</tr>
<?php foreach ($nc_items as $nc_item):
$nc_item_subdivision_url = nc_folder_path($nc_item['Subdivision_ID']);
$nc_item_subdivision_name = $nc_core->subdivision->get_by_id($nc_item['Subdivision_ID'], 'Subdivision_Name'); ?>
<tr class="cart-item">
<!-- Номер товара -->
<td class="visible-lg visible-md center middle"><?= $nc_items_counter++; ?></td>
<!-- Фото товара -->
<td class="visible-lg visible-md">
<img src="<?= $nc_item['Image']; ?>" class="img-responsive" style="width:125px;"/>
</td>
<!-- Информация о товаре -->
<td class="middle">
<?= $nc_item['ItemID']; ?><br/>
<a href="<?= $nc_item['URL'] ?>"><?= $nc_item['FullName']; ?></a><br/>
<a href="<?= $nc_item_subdivision_url; ?>"><?= $nc_item_subdivision_name; ?></a>
</td>
<!-- Кол-во товара -->
<td class="middle" class="visible-lg visible-md">
<?= $nc_item['Qty']; ?> <?= htmlspecialchars($nc_item['Units']) ?>
</td>
<!-- Цена товара -->
<td class="middle"><?= $nc_item['OriginalPriceF']; ?></td>
<!-- Скидка на товар -->
<td class="middle"><?= $nc_item['ItemDiscountF']; ?></td>
<!-- Стоимость товара -->
<td class="middle"><?= $nc_item['TotalPriceF']; ?></td>
</tr>
<?php endforeach;
if ($nc_cart_discount > 0): ?>
<tr>
<!-- Номер товара -->
<td class="visible-lg visible-md"></td>
<!-- Фото товара -->
<td class="visible-lg visible-md"></td>
<!-- Информация о товаре -->
<td></td>
<!-- Кол-во товара -->
<td class="visible-lg visible-md"></td>
<!-- Цена товара -->
<td class="visible-lg visible-md"></td>
<!-- Скидка на товар -->
<td class="visible-lg visible-md"></td>
<!-- Стоимость товара -->
<td class="lead">
Скидка<br>на корзину:<br/>
<?= $nc_netshop->format_price($nc_cart_discount); ?>
</td>
</tr>
<?php endif; ?>
<tr>
<!-- Номер товара -->
<td class="visible-lg visible-md"></td>
<!-- Фото товара -->
<td class="visible-lg visible-md"></td>
<!-- Информация о товаре -->
<td></td>
<!-- Кол-во товара -->
<td class="visible-lg visible-md"></td>
<!-- Цена товара -->
<td class="visible-lg visible-md"></td>
<!-- Скидка на товар -->
<td class="visible-lg visible-md"></td>
<!-- Стоимость товара -->
<td class="lead">
Итого:<br/>
<?= $nc_netshop->format_price($nc_cart_total_price); ?>
</td>
</tr>
</table>
<!-- МЕТОД ДОСТАВКИ -->
<h2>Выбранный метод доставки</h2>
<p><b>Название:</b> <?= $delivery_method->get('name'); ?></p>
<!-- Если самовывоз -->
<?php if ($delivery_method_id == $delivery_method_pickup_id): ?>
<p><b>Пункт самовывоза:</b> <?= $pickup_points[$pickup_point_id]['Name']; ?></p>
<?php endif; ?>
<!-- Если курьерская доставка -->
<?php if ($delivery_method_id == $delivery_method_courier_id): ?>
<p><b>Город:</b> <?= $_POST['__delivery_courier_city']; ?></p>
<p><b>Адрес:</b> <?= $f_Address; ?></p>
<p><b>Индекс:</b> <?= $f_Zip; ?></p>
<p><b>Комментарий к доставке:</b> <?= $f_Comments; ?></p>
<?php endif; ?>
<p><b>Наценка:</b> <?= $nc_netshop->format_price($delivery_method_cost); ?></p>
<p><button type="submit" name="page" value="<?= $page_delivery; ?>" class="btn btn-primary">Изменить</button></p>
<!-- МЕТОД ОПЛАТЫ -->
<h2>Выбранный метод оплаты</h2>
<p><b>Название:</b> <?= $payment_method->get('name'); ?></p>
<p><b>Наценка:</b> <?= $nc_netshop->format_price($payment_method_cost); ?></p>
<p><button type="submit" name="page" value="<?= $page_payment; ?>" class="btn btn-primary">Изменить</button></p>
<!-- ИТОГО -->
<h2>Итоговая сумма</h2>
<p><b>Итого:</b> <?= $nc_netshop->format_price($total_price); ?></p>
<?php endif; ?>
<?php /* ######################################################################## */ ?>
<?php /* # ИТОГОВЫЕ КНОПКИ ФОРМЫ # */ ?>
<?php /* ######################################################################## */ ?>
<div class="row">
<div class="col-md-12">
<?php
$style = ' style="margin-left:15px;" ';
if ($page == $pages_count): ?>
<button type="submit" name="posting" value="1" class="btn btn-primary pull-right" <?= $style; ?> >Оформить</button>
<?php else: ?>
<button type="submit" name="go_to_next_page" value="1" class="btn btn-primary pull-right" <?= $style; ?> >Далее</button>
<?php endif; ?>
<?php if ($page > $start_page): ?>
<button type="submit" name="go_to_prev_page" value="1" class="btn btn-primary pull-right">Назад</button>
<?php endif; ?>
</div>
</div>
</form>
<script>
$(document).ready(function() {
// Маска для полей с телефоном
$('.phonemask').mask('+7 (999) 999-99-99');
// ########################################################################
// #ЧИСТКА ПОЛЕЙ В ТАБАХ НА СТРАНИЦЕ "ПОЛЬЗОВАТЕЛЬ" ПРИ ПЕРЕКЛЮЧЕНИИ ТАБОВ#
// ########################################################################
// Поля
var inputAuthLogin = $('#input-auth-login');
var inputAuthPassword = $('#input-auth-password');
var inputRegFIO = $('#input-reg-fio');
var inputRegEmail = $('#input-reg-email');
var inputRegPhone = $('#input-reg-phone');
var inputAnonymFIO = $('#input-anonym-fio');
var inputAnonymPhone = $('#input-anonym-phone');
// При переключении табов
$('.user-page-tabs a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
// Узнаем ID таба, на который мы переключились
var id = $(e.target).attr('href');
id = id.replace(/#/, '');
// Почистим данные в других табах
if (id === 'auth') {
inputRegFIO.val('');
inputRegEmail.val('');
inputRegPhone.val('');
inputAnonymFIO.val('');
inputAnonymPhone.val('');
} else if (id === 'reg') {
inputAuthLogin.val('');
inputAuthPassword.val('');
inputAnonymFIO.val('');
inputAnonymPhone.val('');
} else if (id === 'anonym') {
inputAuthLogin.val('');
inputAuthPassword.val('');
inputRegFIO.val('');
inputRegEmail.val('');
inputRegPhone.val('');
}
});
// ##########################################################
// #ПОДСКАЗКИ ПРИ ВЫБОРЕ МЕТОДА ДОСТАВКИ "КУРЬЕРСКАЯ СЛУЖБА"#
// ##########################################################
$('input[name="__delivery_courier_search"]').suggestions({
serviceUrl: 'https://suggestions.dadata.ru/suggestions/api/4_1/rs',
token: 'ade54f576082516df9065a5c2c95674a68c7fc1d',
type: 'ADDRESS',
count: 5,
onSelect: function(response) {
var data = response.data;
// Данные из ответа
var city = data.city;
var city_type = data.city_type;
var street = data.street;
var street_type = data.street_type;
var house = data.house;
var house_type = data.house_type;
var flat = data.flat;
var flat_type = data.flat_type;
var zip = data.postal_code;
// Итоговый адрес
var address = '';
if (street !== null) {
address += street_type + ' ' + street;
}
if (house !== null) {
address += ', ' + house_type + ' ' + house;
}
if (flat !== null) {
address += ', ' + flat_type + ' ' + flat;
}
$('input[name="f_Address"]').val(address);
// Почтовый индекс
$('input[name="f_Zip"]').val(zip);
// Город (текстовое значение)
$('input[name="__delivery_courier_city"]').val(city);
// Город (ID города из списка)
if (city.length > 0) {
$.ajax({
type: 'POST',
url: '/_cdn/order/city.php',
data: {
city: city
},
success: function(response) {
// Установим значение ID города в нужное поле
$('input[name="f_City"]').val(response);
}
});
}
}
});
// #########################################################
// #ПОКАЗ/СОКРЫТИЕ БЛОКОВ ДЛЯ ОПРЕДЕЛЕННЫХ МЕТОДОВ ДОСТАВКИ#
// #########################################################
var deliveryMethodPickupID = <?= $delivery_method_pickup_id; ?>;
var deliveryMethodCourierID = <?= $delivery_method_courier_id; ?>;
var blockDeliveryMethodPickup = $('#block-delivery-method-pickup');
var blockDeliveryMethodCourier = $('#block-delivery-method-courier');
$('input[name="f_DeliveryMethod"]').click(function() {
var id = parseInt($(this).val());
// Скрываем все доп. блоки
blockDeliveryMethodPickup.hide();
blockDeliveryMethodCourier.hide();
// Очищаем все поля, связанные с курьерской доставкой
$('input[name="__delivery_courier_search"]').val('');
$('input[name="__delivery_courier_city"]').val('');
$('input[name="f_Address"]').val('');
$('input[name="f_Zip"]').val('');
$('input[name="f_City"]').val('');
// Выбираем первый пункт самовывоза (как бы сбрасываем выбор пунктов самовывоза)
$('input:radio[name="f_PickupPointID"]:first').prop('checked', true);
// Показываем доп. блок при выборе связанного с ним метода доставки
if (id === deliveryMethodPickupID) {
blockDeliveryMethodPickup.show();
} else if (id === deliveryMethodCourierID) {
blockDeliveryMethodCourier.show();
}
});
});
</script>
AddCond.html
<?php
$nc_core = nc_core::get_object();
$netshop = nc_netshop::get_instance();
$order = nc_netshop_order::from_post_data($nc_core->input->fetch_post(), $netshop);
$order_errors = $netshop->check_new_order($order);
if ($order_errors) {
$posting = 0;
$warnText = (isset($warnText) && strlen($warnText) ? "$warnText<br />\n" : "") .
join("<br />\n", $order_errors);
}
?>
AddActionTemplate.html
<?php
$order->set_id($msgID);
$order->offsetUnset('SignUp');
$email = $order['Email'];
$reg_data = array();
$auth_settings = $nc_core->get_settings('', 'auth', false, $catalogue_id);
if (!$AUTH_USER_ID) {
if (!isset($_SESSION['user_hash'])) {
$_SESSION['user_hash'] = md5((mt_rand(1, 1000) * mt_rand(1, 100) + mt_rand(1, 10000)) / mt_rand(1, 10));
}
$order->set('user_hash', $_SESSION['user_hash']);
if ($nc_core->input->fetch_post('f_SignUp')) {
$user_id = 0;
if ($nc_core->user->check_login($email) == NC_AUTH_LOGIN_OK) {
$alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
$length = strlen($alphabet);
$password = '';
for ($i = 0; $i < 8; $i++) {
$password .= $alphabet[mt_rand(0, $length - 1)];
}
$registration_code = $auth_settings['confirm'] ? md5(uniqid('', true)) : '';
try {
$user = array(
'Email' => $email,
'Login' => $email,
'ForumName' => $order['ContactName'],
);
$user_id = $nc_core->user->add($user, 2, $password, array(
'Checked' => $auth_settings['confirm'] ? 0 : 1,
), $registration_code);
} catch (Exception $e) {
}
}
if ($user_id) {
$order->set('User_ID', $user_id);
$reg_data = array('user_id' => $user_id, 'password' => $password);
if ($auth_settings['autoauthorize']) {
$nc_core->user->authorize_by_id($user_id);
}
}
}
}
setcookie('Order_ContactName', $order['ContactName'], time() + 31536000, '/');
setcookie('Order_Email', $order['Email'], time() + 31536000, '/');
setcookie('Order_City', $order['City'], time() + 31536000, '/');
setcookie('Order_Phone', $order['Phone'], time() + 31536000, '/');
setcookie('Order_Address', $order['Address'], time() + 31536000, '/');
setcookie('Order_Zip', $order['Zip'], time() + 31536000, '/');
$netshop->place_order($order, $reg_data);
$payment_method = new nc_netshop_payment_method($order['PaymentMethod']);
$payment_system_id = $payment_method['handler_id'];
$invoice = null;
if ($payment_system_id && nc_module_check_by_keyword('payment', false)) {
$invoice = new nc_payment_invoice(array(
"payment_system_id" => $payment_system_id,
"amount" => $order->get_totals(),
"description" => "Оплата заказа $msgID",
"currency" => $netshop->get_currency_code(),
"customer_id" => $AUTH_USER_ID,
"customer_name" => (string)$f_ContactName,
"customer_email" => (string)$f_Email,
"customer_phone" => (string)$f_Phone,
"order_source" => 'netshop',
"order_id" => $msgID,
));
$invoice->save();
}
while (ob_end_clean()) ;
if ($isNaked) {
echo 'OK';
} else {
header("Location: {$nc_core->SUB_FOLDER}/orders/added" . ($invoice ? ("?invoice=" . $invoice->get('id')) : ""));
}
exit;
?>
以上是关于php Интернет-магазин(неразобрано)的主要内容,如果未能解决你的问题,请参考以下文章
text ТаймингиMODX(Запросыкбазеданных,времяпарсингаит.д。)
php сортировкамногомерногомассивапозначению
php Изменяетзапрос,чтобыработалапагинациянастранице类别。 Страница(page)categoryдолжнабытьсозданавадмин
python Скриптпреобразованияматрицызаполняемойпострочновматрицузаполняемуюпоспирали---найденчерезгугл
php Добавлениесобственныхфразпередзаголовкомтовара,настраницетовара