Nhảy tới nội dung

Shipping

Đăng ký gateway

Đầu tiên bạn cần đăng ký cổng giao hàng của bạn với hệ thống

function my_shipping_gateway($gateways)
{
$gateways['my_shipping'] = [
'label' => 'Tên cổng giao hàng',
'description' => 'Mô tả',
'class' => 'MY_Shipping', //class xử lý các yêu cầu shipping
'callback' => 'MY_Shipping::setting', //callback hiển thị trang cấu hình
];
return $gateways;
}
add_filter('shipping_gateways', 'my_shipping_gateway', 10, 2);

Danh sách gateway shipping

Để lấy danh sách các cổng giao hàng hiện có bạn dùng method

Shippings::list();

Lấy chi tiết của một cổng theo key

Shippings::list('my_shipping');

Class Xử lý

class MY_Shipping {

function __construct() {
}

static function form($keyShipping, $shipping): void
{
}

static function config(\SkillDo\Http\Request $request): void
{
}

static function listService($package, $order)
{
}

static function calculate($package): bool|int
{
return 0;
}

static function change($shipping, $order): array
{
$orderMeta = [];

return [
'order' => $order,
'orderMeta' => $orderMeta
];
}
}

Method hiển thị form cấu hình

class MY_Shipping 
{
static function form($keyShipping, $shipping): void
{
$languages = Language::list();

$languageDefault = Language::default();

$tabs = [];

$form = form();

$form->none('<div class="row">');

$form->radio('enabled', ['Tắt','Bật'], [
'label' => 'Bật /Tắt hình thức vận chuyển này',
], (!empty($shipping['enabled'])) ? 1 : 0);

$form->checkbox('default', SHIP_KEY, [
'label' => 'Đặt làm phí ship mặc định',
], (!empty($shipping['default'])) ? SHIP_KEY : '');

if(count($languages) === 1) {

$form->image('img', [ 'label' => 'Icon', 'start' => 4, ], $shipping['img']);

$form->text('title', [ 'label' => 'Tiêu đề', 'start' => 8, ], $shipping['title']);

$form->textarea('description', [ 'label' => 'Mô tả', ], $shipping['description']);
}
else {

$form->image('img', [ 'label' => 'Icon', 'start' => 12, ], $shipping['img']);

foreach ($languages as $languageKey => $language) {
$tabs['shipping_'.$languageKey] = [
'label' => $language['label'],
'content' => function () use ($languageKey, $languageDefault, $shipping) {

$name = ($languageDefault == $languageKey) ? '' : '_'.$languageKey;

$form = form();

$form->none('<div class="row">');

$form->text('title'.$name, [ 'label' => 'Tiêu đề', 'start' => 8, ], $shipping['title'.$name] ?? '');

$form->textarea('description'.$name, ['label' => 'Mô tả',], $shipping['description'.$name] ?? '');

$form->none('</div>');

$form->html(false);
}
];
}
}

$form->none('</div>');

$form = apply_filters('admin_payment_'.$keyShipping.'_input_fields', $form, $shipping);

$form->html(false);

if(!empty($tabs)) {
echo Admin::tabs($tabs, 'shipping_'.Language::default());
}
}
}

Method lưu lại thông tin cấu hình

class MY_Shipping 
{
static function config(\SkillDo\Http\Request $request): void
{
$shipping_key = trim((string)$request->input('shipping_key'));

$enabled = trim((string)$request->input('enabled'));

$default = trim((string)$request->input('default'));

$img = trim((string)$request->input('img'));

$title = trim((string)$request->input('title'));

$description = trim((string)$request->input('description'));

if(empty($title)) {
response()->error('Không được để trống tên hình thức vận chuyển');
}

$shipping = Option::get('cart_shipping', []);

if (!have_posts($shipping)) $shipping = [];

$shipping[$shipping_key]['enabled'] = (!empty($enabled)) ? $enabled : false;

$shipping[$shipping_key]['title'] = $title;

$shipping[$shipping_key]['description'] = $description;

$shipping[$shipping_key]['img'] = FileHandler::handlingUrl($img);

if(Language::isMulti()) {

$languages = Language::list();

$languageDefault = Language::default();

foreach ($languages as $languageKey => $language) {

if($languageKey == $languageDefault) continue;

$title = trim((string)$request->input('title_'.$languageKey));

$description = trim((string)$request->input('description_'.$languageKey));

$shipping[$shipping_key]['title_'.$languageKey] = $title;

$shipping[$shipping_key]['description_'.$languageKey] = $description;
}
}

Option::update('cart_shipping', $shipping);

if(!empty($default) && $default == $shipping_key) {
Option::update('cart_shipping_default', $default);
}
}
}