Этот хук обрабатывает форму "Купить в 1 клик", создает заказ в miniShop2
Подходит для Formit, FetchIt на других потетсровать не удалось)))
Искал решение но тут на портале много заморочек с правкой скриптов JS и тп, думаю самый просто вариант это хук…
Пример вызова:
Искал решение но тут на портале много заморочек с правкой скриптов JS и тп, думаю самый просто вариант это хук…
Пример вызова:
{'!FetchIt' | snippet : [
'form' => 'form_oneclick',
'hooks' => 'msOrderOneClick,FormItSaveForm,email',
]}
Создаем сниппет msOrderOneClick:<?php
/**
* Хук FormIt для покупки в 1 клик через miniShop2
*
* Этот хук обрабатывает форму "Купить в 1 клик", создает заказ в miniShop2
* и возвращает результат для дальнейшей обработки FormIt
*/
/** @var modX $modx Глобальный объект MODX для работы с API */
/** @var \Sterc\FormIt\Hook $hook Объект хука FormIt, содержащий данные формы и методы обработки */
/** @var miniShop2 $miniShop2 Объект miniShop2 для работы с магазином */
// Получаем текущего пользователя и его профиль для получения email
$user = $modx->user; // Текущий авторизованный пользователь
$profile = $user->getOne('Profile'); // Профиль пользователя с дополнительными данными
// Определяем обязательные поля формы
$requiredFields = ['name', 'phone','comment', 'pageId'];
// ID способов доставки и оплаты (настраиваются в админке miniShop2)
$delivery_id = 1; //Тут указываем ид типа доставки из настроек minishop2
$payment_id = 1; //Тут указываем ид типа оплаты из настроек minishop2
// Проверка заполнения обязательных полей
foreach ($requiredFields as $field) {
// Если поле пустое, добавляем ошибку валидации
if (empty($hook->getValue($field))) {
$hook->addError($field, 'Поле обязательно для заполнения');
return false; // Прерываем выполнение хука
}
}
// Получаем данные из формы и устанавливаем приоритеты для email
$receiver = $hook->getValue('name'); // Имя покупателя
$phone = $hook->getValue('phone'); // Телефон покупателя
// Email: из формы -> из профиля пользователя -> из настроек сайта (по умолчанию)
$email = $hook->getValue('email') ? : $profile->email ? : $modx->getOption('emailsender');
$comment = $hook->getValue('comment'); // Комментарий к заказу
$product_id = (int)$hook->getValue('pageId'); // ID товара для покупки
// Инициализация miniShop2
$miniShop2 = $modx->getService('miniShop2'); // Получаем сервис miniShop2
// Инициализируем miniShop2 с параметром json_response=true для получения JSON ответа
$miniShop2->initialize($modx->context->key, ['json_response' => true]);
// Проверка успешной инициализации miniShop2
if (!$miniShop2) {
$hook->addError('form', 'Сервис магазина miniShop2 недоступен'); // Добавляем ошибку
return false; // Прерываем выполнение
}
// Добавляем товар в корзину
$miniShop2->cart->clean(); // Очищаем текущую корзину
$cartAdd = $miniShop2->cart->add($product_id, 1); // Добавляем выбранный товар (1 штука)
// Создаем заказ в miniShop2, заполняя необходимые поля
$miniShop2->order->add('receiver', $receiver); // Добавляем имя получателя
$miniShop2->order->add('phone', $phone); // Добавляем телефон
$miniShop2->order->add('comment', 'Заказ в 1 клик: ' . $comment); // Добавляем комментарий с префиксом
$miniShop2->order->add('email', $email); // Добавляем email покупателя
$miniShop2->order->add('delivery', $delivery_id); // Добавляем способ доставки
$miniShop2->order->add('payment', $payment_id); // Добавляем способ оплаты
// Отправляем заказ (сохраняем в базе данных)
$orderSave = $miniShop2->order->submit();
if (!$orderSave) {
$hook->addError('form', 'Сервис корзины miniShop2 недоступен'); // Добавляем ошибку
return false; // Прерываем выполнение
}
// Возвращаем результат выполнения для FormIt
// FormIt будет обрабатывать этот результат в зависимости от настроек (hooks)
return true;
Поблагодарить автора
Отправить деньги
Комментарии: 1
самый просто вариант это хукЯ тоже так думаю
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.