Ограничение служб доставки по наличию товара на складе, Ограничение служб доставки по наличию товара на складе для расчета стоимости и отображения вариантов в карточке товара
Всем привет. Предыстория: В карточке товара вывел варианты "доставки и самовывоза", с 00:01 до 23:00 у меня выводится: Самовывоз сегодня - бесплатно , а с 23:00 до 00:01: Самовывоз сегодня - бесплатно Также ограничил вывод по дням недели, так как в выходные работаем с 9:00 до 18:00. Все казалось бы прекрасно, но некоторых товаров естественно нет в наличии и мне не нужно, чтобы в карточке таких товаров отображался вариант самовывоза. Хочу там выводить только: Доставка на следующий день.
Так вот, пытаюсь ограничить службу доставки по наличию товара на складе, то есть у товаров с нулевым остатком, я не буду выводить службу доставки "Самовывоз".
Пробую сделать так:
Код
//ограничение по наличию товара на складах (если 0, то отправит false).
$arQuantity = CCatalogProduct::GetByID($arResult['ID']);
$quantityAll = $arQuantity['QUANTITY'];
if ($quantityAll > 0) {
return true;
} else {
return false;
}
Но, количество не передается в файл php с ограничением службы доставки. Как можно решить проблему?
У меня есть компонент отображения и модуля ограничения служб доставок: Компонент edost.catalogdelivery выводит службы доставки в карточку товара. Модуль alkodesign.restrictions добавляет ограничение служб доставки и оплаты по php строке вида return (true/false) или имя функции.
С помощью ограничения по php строке я сделал в разных службах доставки вот такие ограничения по дням недели и времени:
Код
<?php
//ограничение по времени работы (с "время открытия" до "время закрытия"), использую для "Самовывоз сегодня".
$now = new \DateTimeImmutable();
$startWork = new \DateTimeImmutable("08:00");
$endWork = new \DateTimeImmutable("23:00");
if ($startWork <= $now && $now <= $endWork) {
return true;
} else {
return false;
}
//ограничение по времени работы (с "время открытия" до "время закрытия"), использую для "Самовывоз завтра".
$now = new \DateTimeImmutable();
$startWork = new \DateTimeImmutable("23:00");
$endWork = new \DateTimeImmutable("+1 day 08:00");
if ($startWork <= $now && $now <= $endWork) {
return true;
} else {
return false;
}
//ограничение по дням работы (суббота и воскресенье).
$now = (new \DateTimeImmutable())->format('w');
if ($now === '6'|| $now === '0') {
return true;
} else {
return false;
}
//ограничение по дням работы (искулючаем субботу и воскресенье).
$now = (new \DateTimeImmutable())->format('w');
if ($now !== '6'|| $now !== '0') {
return true;
} else {
return false;
}
?>
Таким же образом хотел бы ограничить и по наличию товара. Штатно можно ограничить по наличию какого-то товара в корзине. Но как правильно передать значения наличия товара в мой php код я не знаю, Ваш способ тоже не помог. Думаю проблема в том, что он почему-то не определяет ID товара и не может подгрузить количество. Думаю я добавил ясности в эту тему) Спасибо, что пытаетесь помочь, если вдруг знаете, как такое решить и поможете, буду весьма благодарен!
Стандартное ограничение Битрикс "по категории" для доставок работает если в корзине только товары из выбранной категории, если в корзине есть товар не из выбранной категории, то ограничение не работает.
Как можно это поправить, чтобы такое ограничение работало, если в корзине хотя бы 1 товар с ограничением, то работало доставка именно для ограничений?