Методи доставки
Віджети доставки надають гнучкий спосіб налаштування полів форми оформлення замовлення для різних методів доставки в sCommerce. Кожен метод доставки може мати власний Blade-шаблон, який відображає необхідні поля форми.
Огляд
Починаючи з версії 1.x, sCommerce підтримує налаштовувані віджети доставки через Blade-шаблони. Це дозволяє:
- Налаштовувати форми оформлення замовлення для кожного методу доставки
- Створювати специфічні для проєкту реалізації доставки
- Інтегрувати віджети сторонніх служб доставки (Нова Пошта, UPS тощо)
- Підтримувати єдиний стиль для всіх методів доставки
Пріоритет пошуку шаблонів
Шаблони шукаються в наступному порядку пріоритету:
-
Види проєкту (найвищий пріоритет)
views/delivery/{назва-доставки}.blade.php -
Vendor за замовчуванням (найнижчий пріоритет)
core/vendor/seiger/scommerce/views/delivery/{назва-доставки}.blade.php
Це дозволяє перевизначити будь-який шаблон доставки, просто скопіювавши його в директорію views вашого проєкту.
Доступні змінні
Усі шаблони віджетів доставки отримують наступні змінні:
$delivery
Масив з інформацією про метод доставки:
$delivery['name']- Унікальний ідентифікатор доставки (наприкл ад, 'courier', 'pickup')$delivery['title']- Локалізована назва методу доставки$delivery['description']- Локалізований опис методу доставки
$checkout
Масив з поточними даними оформлення замовлення:
$checkout['user']- Інформація про користувача$checkout['user']['address']- Дані адреси (місто, вулиця, будинок, квартира тощо)$checkout['cart']- Дані кошика покупок- Інша інформація, пов'язана з оформленням замовлення
$settings
Масив з налаштуваннями методу доставки, сконфігурованими в адмін-панелі:
- Користувацькі налаштування різняться для кожного методу доставки
- Приклад для кур'єра:
$settings['cities'],$settings['info'] - Приклад для самовивозу:
$settings['locations']
Створення власного віджета доставки
Крок 1: Створення класу доставки
Створіть новий клас методу доставки, що розширює BaseDeliveryMethod:
<?php namespace App\Delivery;
use Seiger\sCommerce\Delivery\BaseDeliveryMethod;
class CustomDelivery extends BaseDeliveryMethod
{
public function getName(): string
{
return 'custom';
}
public function getType(): string
{
return "<b>Користувацька доставка</b> (custom)";
}
public function getValidationRules(): array
{
return [
'delivery.custom.address' => 'required|string|max:255',
'delivery.custom.phone' => 'required|string',
];
}
public function calculateCost(array $order): float
{
return 50.00; // Фіксована вартість або власний розрахунок
}
public function defineFields(): array
{
return [
// Поля налаштувань адмін-панелі
];
}
public function prepareSettings(array $data): string
{
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}
Крок 2: Створення шаблону віджета
Створіть Blade-шаблон для вашого віджета доставки:
Файл: views/delivery/custom.blade.php
{{--
Віджет користувацької доставки
Доступні змінні: $delivery, $checkout, $settings
--}}
<label class="form-label">
<input
type="text"
name="delivery[{{$delivery['name']}}][address]"
value="{{old('delivery.'.$delivery['name'].'.address', '')}}"
placeholder="Введіть адресу доставки"
required
/>
<span>Адреса доставки</span>
</label>
<label class="form-label">
<input
type="tel"
name="delivery[{{$delivery['name']}}][phone]"
placeholder="Номер телефону"
required
/>
<span>Контактний телефон</span>
</label>
Крок 3: Реєстрація методу доставки
Метод доставки буде автоматично зареєстрований при додаванні в базу даних з правильним ім'ям класу.