PageRenderTime 67ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/components/bitrix/catalog.item/templates/store_v3/template.php

https://gitlab.com/alexprowars/bitrix
PHP | 279 lines | 239 code | 31 blank | 9 comment | 16 complexity | ea708ea0d58acc3dc9a0e3a5a418dc53 MD5 | raw file
  1. <?php
  2. use Bitrix\Main;
  3. use Bitrix\Main\Localization\Loc;
  4. if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
  5. {
  6. die();
  7. }
  8. /**
  9. * @var array $arParams
  10. * @var array $arResult
  11. * @var CBitrixComponentTemplate $this
  12. * @var string $templateFolder
  13. * @var CBitrixComponent $component
  14. */
  15. $this->setFrameMode(true);
  16. if (isset($arResult['ITEM']))
  17. {
  18. $messages = [
  19. 'CLOSE_BTN' => Loc::getMessage('CT_BCI_TPL_MESS_CLOSE_BTN_TITLE')
  20. ];
  21. $item = $arResult['ITEM'];
  22. $areaId = $arResult['AREA_ID'];
  23. $itemIds = [
  24. 'ID' => $areaId,
  25. 'NAME' => $areaId.'_name',
  26. 'POPUP' => $areaId.'_popup',
  27. 'PREBUY' => $areaId.'_prebuy',
  28. 'PICT_SLIDER' => $areaId.'_pict_slider',
  29. 'STICKER_ID' => $areaId.'_sticker',
  30. 'SECOND_STICKER_ID' => $areaId.'_secondsticker',
  31. 'QUANTITY' => $areaId.'_quantity',
  32. 'QUANTITY_COUNTER' => $areaId.'_counter',
  33. 'QUANTITY_DOWN' => $areaId.'_quant_down',
  34. 'QUANTITY_UP' => $areaId.'_quant_up',
  35. 'QUANTITY_MEASURE' => $areaId.'_quant_measure',
  36. 'QUANTITY_MEASURE_CONTAINER' => $areaId.'_quant_measure_container',
  37. 'QUANTITY_LIMIT' => $areaId.'_quant_limit',
  38. 'BUY_LINK' => $areaId.'_buy_link',
  39. 'ADD_BASKET_LINK' => $areaId.'_add_basket_link',
  40. 'BASKET_ACTIONS' => $areaId.'_basket_actions',
  41. 'NOT_AVAILABLE_MESS' => $areaId.'_not_avail',
  42. 'SUBSCRIBE_LINK' => $areaId.'_subscribe',
  43. 'COMPARE_LINK' => $areaId.'_compare_link',
  44. 'PRICE' => $areaId.'_price',
  45. 'PRICE_TWIN' => $areaId.'_price_twin',
  46. 'BLOCK_PRICE_OLD' => $areaId.'_block_price',
  47. 'BLOCK_PRICE_OLD_TWIN' => $areaId.'_block_price_twin',
  48. 'PRICE_OLD' => $areaId.'_price_old',
  49. 'PRICE_OLD_TWIN' => $areaId.'_price_old_twin',
  50. 'PRICE_DISCOUNT' => $areaId.'_price_discount',
  51. 'PRICE_DISCOUNT_TWIN' => $areaId.'_price_discount_twin',
  52. 'PRICE_TOTAL' => $areaId.'_price_total',
  53. 'PROP_DIV' => $areaId.'_sku_tree',
  54. 'PROP' => $areaId.'_prop_',
  55. 'DISPLAY_PROP_DIV' => $areaId.'_sku_prop',
  56. 'BASKET_PROP_DIV' => $areaId.'_basket_prop',
  57. ];
  58. $itemIds['PREBUY_OPEN_BTN'] = $itemIds['PREBUY'].'_open_btn';
  59. $itemIds['PREBUY_OVERLAY'] = $itemIds['PREBUY'].'_overlay';
  60. $itemIds['PREBUY_CONTAINER'] = $itemIds['PREBUY'].'_container';
  61. $itemIds['PREBUY_SWIPE_BTN'] = $itemIds['PREBUY'].'_swipe_btn';
  62. $itemIds['PREBUY_CLOSE_BTN'] = $itemIds['PREBUY'].'_close_btn';
  63. $itemIds['PREBUY_NAME'] = $itemIds['PREBUY'].'_name';
  64. $itemIds['PREBUY_PICT'] = $itemIds['PREBUY'].'_pict';
  65. $obName = 'ob'.preg_replace("/[^a-zA-Z0-9_]/", "x", $areaId);
  66. $productTitle = isset($item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']) && $item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE'] != ''
  67. ? $item['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']
  68. : $item['NAME'];
  69. $imgTitle = isset($item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE']) && $item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE'] != ''
  70. ? $item['IPROPERTY_VALUES']['ELEMENT_PREVIEW_PICTURE_FILE_TITLE']
  71. : $item['NAME'];
  72. $resizedSlider = [
  73. 'X' => [],
  74. 'X2' => [],
  75. ];
  76. foreach ($item['MORE_PHOTO'] as $morePhoto)
  77. {
  78. $xResizedImage = \CFile::ResizeImageGet(
  79. $morePhoto['ID'],
  80. [
  81. 'width' => 410,
  82. 'height' => 410,
  83. ],
  84. BX_RESIZE_IMAGE_PROPORTIONAL,
  85. true
  86. );
  87. $x2ResizedImage = \CFile::ResizeImageGet(
  88. $morePhoto['ID'],
  89. [
  90. 'width' => 820,
  91. 'height' => 820,
  92. ],
  93. BX_RESIZE_IMAGE_PROPORTIONAL,
  94. true
  95. );
  96. $xResizedImage['src'] = \Bitrix\Iblock\Component\Tools::getImageSrc([
  97. 'SRC' => $xResizedImage['src']
  98. ]);
  99. $x2ResizedImage['src'] = \Bitrix\Iblock\Component\Tools::getImageSrc([
  100. 'SRC' => $x2ResizedImage['src']
  101. ]);
  102. $resizedSlider['X'][] = [
  103. 'ID' => $morePhoto['ID'],
  104. 'SRC' => $xResizedImage['src'],
  105. 'WIDTH' => $xResizedImage['width'],
  106. 'HEIGHT' => $xResizedImage['height'],
  107. ];
  108. $resizedSlider['X2'][] = [
  109. 'ID' => $morePhoto['ID'],
  110. 'SRC' => $x2ResizedImage['src'],
  111. 'WIDTH' => $x2ResizedImage['width'],
  112. 'HEIGHT' => $x2ResizedImage['height'],
  113. ];
  114. }
  115. $jsParams = [
  116. 'PRODUCT_TYPE' => $item['PRODUCT']['TYPE'],
  117. 'SHOW_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
  118. 'SITE_ID' => $component->getSiteId(),
  119. 'SHOW_ABSENT' => true, // are you sure
  120. 'SECOND_PICT' => $item['SECOND_PICT'], // are you sure
  121. 'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'] === 'Y',
  122. 'SHOW_MAX_QUANTITY' => 'N', // $arParams['SHOW_MAX_QUANTITY'],
  123. 'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
  124. 'SHOW_SKU_PROPS' => false, // overwrite later
  125. 'USE_SUBSCRIBE' => false, // from $arParams
  126. 'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'], // need to change string to array
  127. 'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'] === 'Y',
  128. 'DISPLAY_COMPARE' => false, // $arParams['DISPLAY_COMPARE'],
  129. 'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
  130. 'USE_OFFER_NAME' => $arParams['USE_OFFER_NAME'] === 'Y',
  131. 'BIG_DATA' => $item['BIG_DATA'],
  132. 'VIEW_MODE' => $arResult['TYPE'],
  133. 'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
  134. 'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
  135. 'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
  136. 'BRAND_PROPERTY' => (!empty($item['DISPLAY_PROPERTIES'][$arParams['BRAND_PROPERTY']])
  137. ? $item['DISPLAY_PROPERTIES'][$arParams['BRAND_PROPERTY']]['DISPLAY_VALUE']
  138. : null
  139. ),
  140. 'VISUAL' => [
  141. 'ID' => $itemIds['ID'],
  142. 'NAME' => $itemIds['NAME'],
  143. 'PICT_SLIDER_ID' => $itemIds['PICT_SLIDER'],
  144. 'PRICE_ID' => $itemIds['PRICE'],
  145. 'PRICE_TWIN_ID' => $itemIds['PRICE_TWIN'],
  146. 'BUY_ID' => $itemIds['BUY_LINK'],
  147. 'ADD_BASKET_ID' => $itemIds['ADD_BASKET_LINK'],
  148. 'PREBUY' => $itemIds['PREBUY'],
  149. 'PREBUY_SWIPE_BTN' => $itemIds['PREBUY_SWIPE_BTN'],
  150. 'PREBUY_CLOSE_BTN' => $itemIds['PREBUY_CLOSE_BTN'],
  151. 'PREBUY_OPEN_BTN' => $itemIds['PREBUY_OPEN_BTN'],
  152. 'PREBUY_OVERLAY' => $itemIds['PREBUY_OVERLAY'],
  153. 'PREBUY_CONTAINER' => $itemIds['PREBUY_CONTAINER'],
  154. 'PREBUY_NAME' => $itemIds['PREBUY_NAME'],
  155. 'PREBUY_PICT' => $itemIds['PREBUY_PICT'],
  156. // two next rows need refactor
  157. 'BASKET_ACTIONS_ID' => $itemIds['BASKET_ACTIONS'],
  158. 'NOT_AVAILABLE_MESS' => $itemIds['NOT_AVAILABLE_MESS'],
  159. ],
  160. 'PRODUCT' => [
  161. 'ID' => $item['ID'],
  162. 'NAME' => $productTitle,
  163. 'DETAIL_PAGE_URL' => $item['DETAIL_PAGE_URL'],
  164. 'MORE_PHOTO' => $item['MORE_PHOTO'],
  165. 'MORE_PHOTO_COUNT' => $item['MORE_PHOTO_COUNT'],
  166. 'RESIZED_SLIDER' => $resizedSlider,
  167. ],
  168. 'BASKET' => [
  169. 'ADD_PROPS' => $arParams['ADD_PROPERTIES_TO_BASKET'] === 'Y',
  170. 'QUANTITY' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
  171. 'PROPS' => $arParams['PRODUCT_PROPS_VARIABLE'],
  172. 'BASKET_URL' => $arParams['~BASKET_URL'],
  173. 'ADD_URL_TEMPLATE' => $arParams['~ADD_URL_TEMPLATE'],
  174. 'BUY_URL_TEMPLATE' => $arParams['~BUY_URL_TEMPLATE'],
  175. ],
  176. ];
  177. unset($xResizedImage, $x2ResizedImage, $resizedSlider);
  178. if ($jsParams['SHOW_QUANTITY'])
  179. {
  180. $jsParams['VISUAL']['QUANTITY_ID'] = $itemIds['QUANTITY'];
  181. $jsParams['VISUAL']['QUANTITY_UP_ID'] = $itemIds['QUANTITY_UP'];
  182. $jsParams['VISUAL']['QUANTITY_COUNTER_ID'] = $itemIds['QUANTITY_COUNTER'];
  183. $jsParams['VISUAL']['QUANTITY_DOWN_ID'] = $itemIds['QUANTITY_DOWN'];
  184. $jsParams['VISUAL']['QUANTITY_MEASURE'] = $itemIds['QUANTITY_MEASURE'];
  185. $jsParams['VISUAL']['QUANTITY_MEASURE_CONTAINER'] = $itemIds['QUANTITY_MEASURE_CONTAINER'];
  186. $jsParams['VISUAL']['PRICE_TOTAL_ID'] = $itemIds['PRICE_TOTAL'];
  187. if ($jsParams['SHOW_MAX_QUANTITY'] === 'Y')
  188. {
  189. $jsParams['VISUAL']['QUANTITY_LIMIT'] = $itemIds['QUANTITY_LIMIT'];
  190. }
  191. }
  192. if ($jsParams['SHOW_OLD_PRICE'])
  193. {
  194. $jsParams['VISUAL']['BLOCK_PRICE_OLD_ID'] = $itemIds['BLOCK_PRICE_OLD'];
  195. $jsParams['VISUAL']['BLOCK_PRICE_OLD_TWIN_ID'] = $itemIds['BLOCK_PRICE_OLD_TWIN'];
  196. $jsParams['VISUAL']['PRICE_OLD_ID'] = $itemIds['PRICE_OLD'];
  197. $jsParams['VISUAL']['PRICE_OLD_TWIN_ID'] = $itemIds['PRICE_OLD_TWIN'];
  198. $jsParams['VISUAL']['PRICE_DISCOUNT_ID'] = $itemIds['PRICE_DISCOUNT'];
  199. $jsParams['VISUAL']['PRICE_DISCOUNT_TWIN_ID'] = $itemIds['PRICE_DISCOUNT_TWIN'];
  200. }
  201. if ($jsParams['DISPLAY_COMPARE'])
  202. {
  203. $jsParams['VISUAL']['COMPARE_LINK_ID'] = $itemIds['COMPARE_LINK'];
  204. }
  205. if ($jsParams['USE_SUBSCRIBE'])
  206. {
  207. $jsParams['VISUAL']['SUBSCRIBE_ID'] = $itemIds['SUBSCRIBE_LINK'];
  208. }
  209. $templateData = [
  210. 'JS_OBJ' => $obName,
  211. 'ITEM' => [
  212. 'ID' => $item['ID'],
  213. 'IBLOCK_ID' => $item['IBLOCK_ID'],
  214. ],
  215. ];
  216. $documentRoot = Main\Application::getDocumentRoot();
  217. $file = new Main\IO\File($documentRoot.$templateFolder.'/'.
  218. (isset($item['PRODUCT']['USE_OFFERS']) && $item['PRODUCT']['USE_OFFERS']
  219. ? 'sku.php'
  220. : 'simple.php'
  221. )
  222. );
  223. if ($file->isExists())
  224. {
  225. /** @noinspection PhpIncludeInspection */
  226. include($file->getPath());
  227. }
  228. if ($jsParams['DISPLAY_COMPARE'])
  229. {
  230. $jsParams['COMPARE'] = [
  231. 'COMPARE_URL_TEMPLATE' => $arParams['~COMPARE_URL_TEMPLATE'],
  232. 'COMPARE_DELETE_URL_TEMPLATE' => $arParams['~COMPARE_DELETE_URL_TEMPLATE'],
  233. 'COMPARE_PATH' => $arParams['COMPARE_PATH'],
  234. ];
  235. }
  236. if ($jsParams['BIG_DATA'])
  237. {
  238. $jsParams['PRODUCT']['RCM_ID'] = $item['RCM_ID'];
  239. }
  240. $jsParams['IS_FACEBOOK_CONVERSION_CUSTOMIZE_PRODUCT_EVENT_ENABLED'] =
  241. $arResult['IS_FACEBOOK_CONVERSION_CUSTOMIZE_PRODUCT_EVENT_ENABLED']
  242. ;
  243. ?>
  244. <script>
  245. var <?=$obName?> = new JCCatalogItem(<?=CUtil::PhpToJSObject($jsParams, false, true)?>);
  246. </script>
  247. <?php
  248. }