bitrix:sale.order.ajax

Компонент служит для оформления заказа на одной странице с использованием технологии AJAX на разных языках.

Данный компонент больше не нуждается в адаптации мультиязычности, так как с версии 2.2.1 все переводы осуществляются на событиях OnSaleComponentOrderJsData и OnSaleComponentOrderResultPrepared модуля sale.

В компоненте предусмотрена возможность переводить платежные системы, службы доставки, свойства заказа и типы покупателей. Данный функционал реализован при помощи языковых файлов, и описан здесь.

Подробнее можно озакомиться на  странице официальной документации.

В компоненте изменены следующие файлы:
  • class.php
Code Copy code Code copied!
1
2
//Выполнено подключение модуля:
Loader::includeModule("modulemarket.translator");
Code Copy code Code copied!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//Изменена данная функция obtainBasket

protected function obtainBasket()
{
   $arResult =& $this->arResult;

   $arResult["MAX_DIMENSIONS"] = $arResult["ITEMS_DIMENSIONS"] = [];
   $arResult["BASKET_ITEMS"] = [];

   $this->calculateBasket = $this->order->getBasket()->createClone();

   $discounts = $this->order->getDiscount();
   $showPrices = $discounts->getShowPrices();
   if (!empty($showPrices['BASKET']))
   {
      foreach ($showPrices['BASKET'] as $basketCode => $data)
      {
         $basketItem = $this->calculateBasket->getItemByBasketCode($basketCode);
         if ($basketItem instanceof Sale\BasketItemBase)
         {
            $basketItem->setFieldNoDemand('BASE_PRICE', $data['SHOW_BASE_PRICE']);
            $basketItem->setFieldNoDemand('PRICE', $data['SHOW_PRICE']);
            $basketItem->setFieldNoDemand('DISCOUNT_PRICE', $data['SHOW_DISCOUNT']);
         }
      }
   }
   unset($showPrices);

   /** @var Sale\BasketItem $basketItem */
   foreach ($this->calculateBasket as $basketItem)
   {
      $arBasketItem = $basketItem->getFieldValues();
      if ($basketItem->getVatRate() > 0)
      {
         $arResult["bUsingVat"] = "Y";
         $arBasketItem["VAT_VALUE"] = $basketItem->getVat();
      }
      $arBasketItem["QUANTITY"] = $basketItem->getQuantity();
      $arBasketItem["PRICE_FORMATED"] = SaleFormatCurrency($basketItem->getPrice(), $this->order->getCurrency());
      $arBasketItem["WEIGHT_FORMATED"] = roundEx(doubleval($basketItem->getWeight() / $arResult["WEIGHT_KOEF"]), SALE_WEIGHT_PRECISION)." ".$arResult["WEIGHT_UNIT"];
      $arBasketItem["DISCOUNT_PRICE"] = $basketItem->getDiscountPrice();

      $arBasketItem["DISCOUNT_PRICE_PERCENT"] = 0;
      if ($arBasketItem['CUSTOM_PRICE'] != 'Y')
      {
         $arBasketItem['DISCOUNT_PRICE_PERCENT'] = Sale\Discount::calculateDiscountPercent(
            $arBasketItem['BASE_PRICE'],
            $arBasketItem['DISCOUNT_PRICE']
         );
         if ($arBasketItem['DISCOUNT_PRICE_PERCENT'] === null)
            $arBasketItem['DISCOUNT_PRICE_PERCENT'] = 0;
      }
      $arBasketItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = $arBasketItem['DISCOUNT_PRICE_PERCENT'].'%';

      $arBasketItem["BASE_PRICE_FORMATED"] = SaleFormatCurrency($basketItem->getBasePrice(), $this->order->getCurrency());

      $arDim = $basketItem->getField('DIMENSIONS');

      if (is_string($arDim))
      {
         $arDim = unserialize($basketItem->getField('DIMENSIONS'), ['allowed_classes' => false]);
      }

      if (is_array($arDim))
      {
         $arResult["MAX_DIMENSIONS"] = CSaleDeliveryHelper::getMaxDimensions(
            [
               $arDim["WIDTH"],
               $arDim["HEIGHT"],
               $arDim["LENGTH"],
            ],
            $arResult["MAX_DIMENSIONS"]);

         $arResult["ITEMS_DIMENSIONS"][] = $arDim;
      }

      $arBasketItem["PROPS"] = [];
      /** @var Sale\BasketPropertiesCollection $propertyCollection */
      $propertyCollection = $basketItem->getPropertyCollection();
      $propList = $propertyCollection->getPropertyValues();
      foreach ($propList as $key => &$prop)
      {
         if ($prop['CODE'] == 'CATALOG.XML_ID' || $prop['CODE'] == 'PRODUCT.XML_ID' || $prop['CODE'] == 'SUM_OF_CHARGE')
            continue;

         $prop = array_filter($prop, ["CSaleBasketHelper", "filterFields"]);
         $arBasketItem["PROPS"][] = $prop;
      }

      $this->arElementId[] = $arBasketItem["PRODUCT_ID"];
      $arBasketItem["SUM_NUM"] = $basketItem->getPrice() * $basketItem->getQuantity();
      $arBasketItem["SUM"] = SaleFormatCurrency(
         $arBasketItem["SUM_NUM"],
         $this->order->getCurrency()
      );

      $arBasketItem["SUM_BASE"] = $basketItem->getBasePrice() * $basketItem->getQuantity();
      $arBasketItem["SUM_BASE_FORMATED"] = SaleFormatCurrency(
         $arBasketItem["SUM_BASE"],
         $this->order->getCurrency()
      );

      $arBasketItem["SUM_DISCOUNT_DIFF"] = $arBasketItem["SUM_BASE"] - $arBasketItem["SUM_NUM"];
      $arBasketItem["SUM_DISCOUNT_DIFF_FORMATED"] = SaleFormatCurrency(
         $arBasketItem["SUM_DISCOUNT_DIFF"],
         $this->order->getCurrency()
      );

      $arResult["BASKET_ITEMS"][] = $arBasketItem;
   }
       //edit_by_Fantych: 15.08.2023 
       \Modulemarket\Translator\Order\OrderClass::translateBasketItems($arResult["BASKET_ITEMS"]);
}

Количество показов: 195
Дата изменения: 02.11.2023 13:56:50