Как получить габариты объекта BasketItem и перевести их в метры
Как в Битриксе получить размеры товара в корзине и привести их к метрам или сантиметрам, а вес к килограммам
Габариты товара из объекта корзины \Bitrix\Sale\BasketItem можно получить следующим образом:
<?php
/** @var \Bitrix\Sale\BasketItem $basketItem */
$dimensions = $basketItem->getField('DIMENSIONS');
if (!is_array($dimensions) && $dimensions != '') {
$dimensions = unserialize($dimensions);
}
//массив с габаритами в мм
$result = [
'width' => !empty($dimensions['WIDTH']) ? floatval($dimensions['WIDTH']) : 0,
'height' => !empty($dimensions['HEIGHT']) ? floatval($dimensions['HEIGHT']) : 0,
'length' => !empty($dimensions['LENGTH']) ? floatval($dimensions['LENGTH']) : 0,
];
Если нужно, можно привести к метрам и сантиметрам:
<?php
foreach ($result as $key => $value) {
$result[$key . '_sm'] = $value / 10; //см
$result[$key . '_m'] = $value / 1000; //м
}
Запись через крестик в одну строку:
<?php
$result['format'] = $result['length'] . ' x ' . $result['width'] . ' x ' . $result['height']; //мм
$result['format_sm'] = $result['length_sm'] . ' x ' . $result['width_sm'] . ' x ' . $result['height_sm']; //см
$result['format_m'] = $result['length_m'] . ' x ' . $result['width_m'] . ' x ' . $result['height_m']; //м
В итоге на выходе получим вот такой массив:
[
"width" => 10,
"height" => 20,
"length" => 30,
"volume" => 6000,
"width_sm" => 1,
"width_m" => 0.01,
"height_sm" => 2,
"height_m" => 0.02,
"length_sm" => 3,
"length_m" => 0.03,
"volume_sm" => 600,
"volume_m" => 6,
"format" => "30 x 10 x 20",
"format_sm" => "3 x 1 x 2",
"format_m" => "0.03 x 0.01 x 0.02",
]
А с помощью данной функции можно преобразовать граммы в килограммы (либо только когда значение больше 1000, либо всегда – по параметру):
<?php
function box_format($value, $decSeparator = ',', $alwaysKg = false)
{
$isKg = $alwaysKg || $value >= 1000;
if ($isKg) {
$value = price_format($value / 1000, 1, $decSeparator);
} else {
if (intval($value) == $value) {
$value = price_format(intval($value), 0, $decSeparator);
} else {
$value = price_format(floatval($value), 1, $decSeparator);
}
}
return $value . ($isKg ? ' кг' : ' г');
}
//...
//получаем вес
$weight = $basketItem->getWeight();
//преобразуем в кг
echo box_format($weight); //1.2 кг
Оставьте комментарий
Если эта статья была полезной для вас, оставьте комментарий ниже или задайте интересующий Вас вопрос. Ваш опыт может помочь другим читателям!
Написать комментарий