dev_gp | fix: перенеса главная, футер, хедер, js, css

master
Andrei 2 months ago
parent bbb3ccccf4
commit 432d45208b
  1. 575
      index.php
  2. 72
      local/templates/.default/components/bitrix/catalog.item/mainpage/template.php
  3. 26
      local/templates/.default/components/bitrix/catalog.section/mainpage/template.php
  4. 64
      local/templates/.default/components/bitrix/catalog/main/!page.php
  5. 640
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/.parameters.php
  6. 63
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/component_epilog.php
  7. 107
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/functions.php
  8. 9
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/result_modifier.php
  9. 359
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/script.js
  10. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/script.map.js
  11. 2
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/script.min.js
  12. 804
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_offers/template.php
  13. 640
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/.parameters.php
  14. 63
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/component_epilog.php
  15. 107
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/functions.php
  16. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/arr_left.png
  17. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/arr_right.png
  18. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/fade_left.png
  19. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/fade_right.png
  20. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/missing.png
  21. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/no_photo.png
  22. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/no_prop_value.png
  23. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/stick.png
  24. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/stick_disc.png
  25. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/x2border.png
  26. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/images/x2border_active.png
  27. 109
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/de/.parameters.php
  28. 27
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/de/template.php
  29. 109
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/en/.parameters.php
  30. 27
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/en/template.php
  31. 110
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/ru/.parameters.php
  32. 28
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/lang/ru/template.php
  33. 90
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/old/style.css
  34. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/old/style.min.css
  35. 9
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/result_modifier.php
  36. 359
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/script.js
  37. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/script.map.js
  38. 2
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/script.min.js
  39. 829
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/template.php
  40. 829
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/template2.php
  41. 267
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/template_new.php
  42. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/black/images/x2border_active.png
  43. 61
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/black/style.css
  44. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/black/style.min.css
  45. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/blue/images/x2border.png
  46. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/blue/images/x2border_active.png
  47. 25
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/blue/style.css
  48. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/blue/style.min.css
  49. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/green/images/x2border.png
  50. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/green/images/x2border_active.png
  51. 26
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/green/style.css
  52. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/green/style.min.css
  53. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/red/images/x2border_active.png
  54. 26
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/red/style.css
  55. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/red/style.min.css
  56. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/wood/images/x2border.png
  57. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/wood/images/x2border_active.png
  58. 62
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/wood/style.css
  59. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/wood/style.min.css
  60. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/yellow/images/x2border.png
  61. BIN
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/yellow/images/x2border_active.png
  62. 26
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/yellow/style.css
  63. 1
      local/templates/.default/components/bitrix/catalog/main/bitrix/!catalog.section/cat_section/themes/yellow/style.min.css
  64. 80
      local/templates/.default/components/bitrix/catalog/main/section_page.php
  65. 33
      local/templates/.default/components/bitrix/menu/catalog_left_menu/.parameters.php
  66. BIN
      local/templates/.default/components/bitrix/menu/catalog_left_menu/images/spacer.png
  67. 10
      local/templates/.default/components/bitrix/menu/catalog_left_menu/lang/de/.parameters.php
  68. 10
      local/templates/.default/components/bitrix/menu/catalog_left_menu/lang/en/.parameters.php
  69. 10
      local/templates/.default/components/bitrix/menu/catalog_left_menu/lang/ru/.parameters.php
  70. 254
      local/templates/.default/components/bitrix/menu/catalog_left_menu/result_modifier.php
  71. 124
      local/templates/.default/components/bitrix/menu/catalog_left_menu/script.js
  72. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/script.map.js
  73. 2
      local/templates/.default/components/bitrix/menu/catalog_left_menu/script.min.js
  74. 222
      local/templates/.default/components/bitrix/menu/catalog_left_menu/style.css
  75. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/style.min.css
  76. 48
      local/templates/.default/components/bitrix/menu/catalog_left_menu/template.php
  77. 27
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/black/colors.css
  78. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/black/colors.min.css
  79. 25
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/blue/colors.css
  80. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/blue/colors.min.css
  81. 25
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/green/colors.css
  82. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/green/colors.min.css
  83. 26
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/red/colors.css
  84. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/red/colors.min.css
  85. 25
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/wood/colors.css
  86. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/wood/colors.min.css
  87. 25
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/yellow/colors.css
  88. 1
      local/templates/.default/components/bitrix/menu/catalog_left_menu/themes/yellow/colors.min.css
  89. 5
      local/templates/.default/components/bitrix/news/services/.description.php
  90. 43
      local/templates/.default/components/bitrix/news/services/style.css
  91. 21
      local/templates/.default/components/bitrix/news/services/template.php
  92. 448
      local/templates/.default/css/custom.css
  93. 2
      local/templates/.default/js/custom.js
  94. 12
      local/templates/.default/js/main.js
  95. 99
      local/templates/EraSeptik/footer.php
  96. 136
      local/templates/EraSeptik/header.php

@ -69,87 +69,67 @@ $APPLICATION->SetTitle("ЭраСептик");
<div class="sale__wrap">
<h3 class="sale__wrap-title">Популярные товары</h3>
<div class="sale__products">
<div class="product">
<a class="product__image" href="product.html">
<picture><source srcset="./img/png/product.webp" type="image/webp"><img src="./img/png/product.png" width="336" height="340" alt="product" /></picture>
</a>
<div class="product__data">
<div class="product__rating rating rating--4">4/5</div>
<div class="product__info">
<a class="product__title" href="product.html">Септик ЭРА 4 прин</a>
<p class="product__text">Решение для небольших дачных домов</p>
</div>
<div class="product__info">
<p class="product__text">Пользователей: <span>1-3 чел</span></p>
<p class="product__text">Производительность: <span>0.5м2</span></p>
<p class="product__text">Сброс: <span>150 литров</span></p>
<p class="product__text">Питание: <span>не нужно</span></p>
</div>
<div class="product__price">77 000 ₽</div>
<div class="product__btns">
<button class="button button--orange">Купить</button>
<button class="button button--outline">Купить с установкой</button>
</div>
</div>
</div>
<div class="product">
<a class="product__image" href="product.html">
<picture><source srcset="./img/png/product.webp" type="image/webp"><img src="./img/png/product.png" width="336" height="340" alt="product" /></picture>
</a>
<div class="product__data">
<div class="product__rating rating rating--4">4/5</div>
<div class="product__info">
<a class="product__title" href="product.html">Септик ЭРА 4 прин</a>
<p class="product__text">Решение для небольших дачных домов</p>
</div>
<div class="product__info">
<p class="product__text">Пользователей: <span>1-3 чел</span></p>
<p class="product__text">Производительность: <span>0.5м2</span></p>
<p class="product__text">Сброс: <span>150 литров</span></p>
<p class="product__text">Питание: <span>не нужно</span></p>
</div>
<div class="product__price">77 000 ₽</div>
<div class="product__btns">
<button class="button button--orange">Купить</button>
<button class="button button--outline">Купить с установкой</button>
</div>
</div>
</div>
<div class="product">
<a class="product__image" href="product.html">
<picture><source srcset="./img/png/product.webp" type="image/webp"><img src="./img/png/product.png" width="336" height="340" alt="product" /></picture>
</a>
<div class="product__data">
<div class="product__rating rating rating--4">4/5</div>
<div class="product__info">
<a class="product__title" href="product.html">Септик ЭРА 4 прин</a>
<p class="product__text">Решение для небольших дачных домов</p>
</div>
<div class="product__info">
<p class="product__text">Пользователей: <span>1-3 чел</span></p>
<p class="product__text">Производительность: <span>0.5м2</span></p>
<p class="product__text">Сброс: <span>150 литров</span></p>
<p class="product__text">Питание: <span>не нужно</span></p>
</div>
<div class="product__price">77 000 ₽</div>
<div class="product__btns">
<button class="button button--orange">Купить</button>
<button class="button button--outline">Купить с установкой</button>
</div>
</div>
</div>
<?php
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"mainpage",
array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "4",
"SECTION_ID" => "",
"SECTION_CODE" => "",
"ELEMENT_SORT_FIELD" => "shows",
"ELEMENT_SORT_ORDER" => "desc",
"PAGE_ELEMENT_COUNT" => "3",
"PROPERTY_CODE" => array("CHEL", "SBROS_NUM", "RECYCLE_VOL"),
"SHOW_ALL_WO_SECTION" => "Y",
"PRICE_CODE" => array(),
"SHOW_PRICE_COUNT" => "1",
"PRICE_VAT_INCLUDE" => "Y",
"ADD_TO_BASKET_ACTION" => "ADD",
"PRODUCT_ID_VARIABLE" => "id",
"PRODUCT_QUANTITY_VARIABLE" => "quantity",
"PRODUCT_PROPS_VARIABLE" => "prop",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"CACHE_GROUPS" => "Y",
"DISPLAY_COMPARE" => "N",
"SET_TITLE" => "N",
"SET_BROWSER_TITLE" => "N",
"SET_META_KEYWORDS" => "N",
"SET_META_DESCRIPTION" => "N",
"ADD_SECTIONS_CHAIN" => "N",
"SHOW_ALL_WO_SECTION" => "Y",
"SHOW_404" => "N",
"MESSAGE_404" => "",
// ... другие параметры по необходимости ...
),
false
);
?>
</div>
</div>
<div class="sale__wrap">
<h3 class="sale__wrap-title">Категории товаров</h3>
<div class="sale__list">
<a class="sale__item" href="/">Септики</a>
<a class="sale__item" href="/">Автономные канализации</a>
<a class="sale__item" href="/">Станции биоочистки</a>
<a class="sale__item" href="/">Локальные очистные сооружения</a>
<a class="sale__item sale__item--green" href="/">
<?php
if (CModule::IncludeModule('iblock')) {
$arFilter = [
'IBLOCK_ID' => 4,
'ACTIVE' => 'Y',
'GLOBAL_ACTIVE' => 'Y',
'DEPTH_LEVEL' => 1
];
$arSelect = ['ID', 'NAME', 'SECTION_PAGE_URL'];
$rsSections = CIBlockSection::GetList(['SORT' => 'ASC'], $arFilter, false, $arSelect);
while ($arSection = $rsSections->GetNext()) {
?>
<a class="sale__item" href="<?= $arSection['SECTION_PAGE_URL'] ?>"><?= htmlspecialchars($arSection['NAME']) ?></a>
<?php
}
}
?>
<a class="sale__item sale__item--green" href="/catalog/">
<span>У нас <u>собственное</u> производство</span>
<span class="sale__item-action">К каталогу</span>
</a>
@ -232,249 +212,162 @@ $APPLICATION->SetTitle("ЭраСептик");
<section class="services container section">
<h2 class="section-title">Мы предлагаем следующие услуги</h2>
<div class="services__list">
<div class="services__item">
<h3 class="services__name">Монтаж септика под ключ</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
<div class="services__list">
<a class="services__item" href="/uslugi/montazh-septikov/">
<h3 class="services__name">Установка септика под ключ</h3>
<p class="services__info">
Осуществление проектов любой сложности.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
<span class="services__price">от 90 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
</div>
<div class="services__item">
<h3 class="services__name">Монтаж септика для дома</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/ustanovka-septika-dlya-chastnogo-doma/">
<h3 class="services__name">Установка септика для дома</h3>
<p class="services__info">
Быстро рассчитаем смету и качественно проведём все необходимые мероприятия.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
</div>
<span class="services__price">от 109 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
<div class="services__item">
<h3 class="services__name">Монтаж септика для дачи</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/ustanovka-septika-dlya-dachi/">
<h3 class="services__name">Установка септика для дачи</h3>
<p class="services__info">
рассмотрим все сложности, быстро и надежно произведём установку.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
</div>
<span class="services__price">от 101 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
<div class="services__item">
<h3 class="services__name">Монтаж септика для бани</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/ustanovka-septika-dlya-bani/">
<h3 class="services__name">Установка септика для бани</h3>
<p class="services__info">
Подготовим проект, предусмотрим все проблемы, проведём монтаж септика под ключ.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
<span class="services__price">от 90 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
</div>
<div class="services__item">
<h3 class="services__name">Монтаж ЛОС</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/montazh-los/">
<h3 class="services__name">Установка ЛОС</h3>
<p class="services__info">
Осуществим проект под различные домовладения, с учётом всех нюансов.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
</div>
<span class="services__price">от 109 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
<div class="services__item">
<h3 class="services__name">Септик для коттеджа</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/ustanovka-septika-dlya-kottedzha/">
<h3 class="services__name">Установка септика для коттеджа</h3>
<p class="services__info">
Скорая калькуляция сметы, оперативный подход в оговоренные сроки.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
</div>
<span class="services__price">от 134 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
<div class="services__item">
<h3 class="services__name">Монтаж септика для кухни</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/ustanovka-septika-dlya-kukhni/">
<h3 class="services__name">Установка септика для кухни</h3>
<p class="services__info">
Примем во внимание все пожелания, быстро и надежно выполним свои услуги.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
<span class="services__price">от 90 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
</div>
<div class="services__item">
<h3 class="services__name">Автономные канализации</h3>
<p class="services__info">Полный монтаж септика под ключ, быстро и&nbsp;надежно.</p>
</a> <a class="services__item" href="/uslugi/montazh-avtonomnykh-kanalizatsiy/">
<h3 class="services__name">Установка автономной канализации</h3>
<p class="services__info">
Специалисты с большим опытом, профессионально проведут совокупность работ.
</p>
<div class="services__data">
<span class="services__price">от 77 000 ₽</span>
<span class="services__time">(от 36 часов)</span>
</div>
</div>
<a class="services__item services__item--green" href="#">
<span class="services__link">Все услуги</span>
</a>
<span class="services__price">от 109 000 ₽</span> <span class="services__time">(от 8.5 часов)</span>
</div>
</a> <a class="services__item services__item--green" href="/uslugi/"> <span class="services__link">Все услуги</span> </a>
</div>
</section>
<section class="order-call container section">
<div class="order-call__wrap" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/house.png');">
<form class="order-call__data" action="#">
<h2 class="section-title">Рассчитать септик <span class="orange-text">за 5 минут!</span></h2>
<p class="order-call__info">Наш менеджер свяжется с вами в ближайшее время</p>
<input type="text" class="input" placeholder="Ваше имя" />
<input type="text" class="input" placeholder="Номер телефона" />
<button class="button button--orange">Заказать звонок</button>
<p class="order-call__personal">Нажимая кнопку «Заказать звонок», вы подтверждаете свое согласие на обработку <a href="#">персональных данных </a></p>
</form>
</div>
</section>
<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_SHOW" => "file",
"PATH" => "/include/order-call.php"
)
);?>
<section class="portfolio portfolio section">
<div class="container">
<section class="completed-objects section">
<div class="container">
<h2 class="section-title">Последние выполненные объекты</h2>
<div class="portfolio__list">
<div class="portfolio__item">
<div class="portfolio__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/completed-object1.png');">
<div class="portfolio__image-details">
<div>Загородный дом в Подмосковье, <span class="portfolio__date">03.05.24</span></div>
<a class="portfolio__link" href="#">Подробнее</a>
</div>
</div>
<h3 class="portfolio__title">Установка септика в коттедж</h3>
<p class="portfolio__info">Клиенту требовалась автономная канализация для проживания</p>
<h4 class="portfolio__sub">Что было сделано:</h4>
<ul class="portfolio__data">
<li class="portfolio__data-item">исследование грунта и уровня грунтовых вод</li>
<li class="portfolio__data-item">выявление особенностей участка и согласование с клиентом</li>
<div class="completed-objects__list">
<div class="completed-objects__item">
<div class="completed-objects__image" style="background-image: url('/local/templates/EraSeptik/images/webp/портфолио-дача-1.webp');">
<div class="completed-objects__image-details">
<div>
Дача в Подмосковье, <span class="completed-objects__date">24.03.25</span>
</div>
<a class="completed-objects__link" href="/interesnoe/portfolio-proektov/ustanovka-septika-dlya-dachi/">Подробнее</a>
</div>
</div>
<h3 class="completed-objects__title"><a href="/interesnoe/portfolio-proektov/ustanovka-septika-dlya-dachi/">Установка септика для дачи</a></h3>
<p class="completed-objects__info">
Клиент пожелал приобрести автономную канализацию для дачи.
</p>
<h4 class="completed-objects__sub">Что было сделано:</h4>
<ul class="completed-objects__data">
<li class="completed-objects__data-item">Был осуществлен бесплатный выезд инженера, который выявил глубину залегания трубы. Определил особенности грунта и будущее месторасположение септика.</li>
<li class="completed-objects__data-item">Септик установлен, готов к использованию. </li>
</ul>
</div>
<div class="portfolio__item">
<div class="portfolio__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/completed-object2.png');">
<div class="portfolio__image-details">
<div>Загородный дом в Подмосковье, 03.05.24</div>
<a class="portfolio__link" href="#">Подробнее</a>
</div>
</div>
<h3 class="portfolio__title">Установка септика в коттедж</h3>
<p class="portfolio__info">Клиенту требовалась автономная канализация для проживания</p>
<h4 class="portfolio__sub">Что было сделано:</h4>
<ul class="portfolio__data">
<li class="portfolio__data-item">исследование грунта и уровня грунтовых вод</li>
<li class="portfolio__data-item">выявление особенностей участка и согласование с клиентом</li>
</ul>
</div>
<div class="portfolio__item">
<div class="portfolio__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/completed-object3.png');">
<div class="portfolio__image-details">
<div>Загородный дом в Подмосковье, 03.05.24</div>
<a class="portfolio__link" href="#">Подробнее</a>
</div>
</div>
<h3 class="portfolio__title">Установка септика в коттедж</h3>
<p class="portfolio__info">Клиенту требовалась автономная канализация для проживания</p>
<h4 class="portfolio__sub">Что было сделано:</h4>
<ul class="portfolio__data">
<li class="portfolio__data-item">исследование грунта и уровня грунтовых вод</li>
<li class="portfolio__data-item">выявление особенностей участка и согласование с клиентом</li>
</ul>
</div>
<div class="portfolio__item portfolio__item--green">
<h3 class="portfolio__title">Вы можете ознакомиться с другими проектами в нашем портфолио</h3>
<a class="portfolio__link" href="#">Перейти к другим работам</a>
</div>
</div>
</div>
</section>
<section class="reviews container section">
<div class="reviews__wrap reviews__swiper">
<div class="reviews__top">
<h2 class="section-title">Что говорят наши клиенты</h2>
<div class="reviews__btns">
<button class="reviews__btn reviews__btn--prev" type="button"></button>
<button class="reviews__btn reviews__btn--next" type="button"></button>
</div>
</div>
<div class="reviews__list swiper-wrapper">
<div class="reviews__item reviews__item--video swiper-slide">
<picture><source srcset="./img/png/review-video.webp" type="image/webp"><img class="reviews__poster-img" src="./img/png/review-video.png" width="400" height="300" alt="Review video poster" /></picture>
<button class="reviews__item-btn button-video">
<picture><source srcset="./img/svg/video-play.svg" type="image/webp"><img src="./img/svg/video-play.svg" width="62" height="62" alt="video-play" /></picture>
</button>
<div class="reviews__value">
<div class="reviews__date">06.06.23</div>
<div class="reviews__rating rating rating--small rating--3">4/5</div>
</div>
<div class="reviews__author">
<div class="reviews__author-name">Анатолий Матвеевич</div>
<div class="reviews__author-city">г. Одинцово</div>
<div class="completed-objects__item">
<div class="completed-objects__image" style="background-image: url('/local/templates/EraSeptik/images/webp/коттедж-порфолио.webp');">
<div class="completed-objects__image-details">
<div>
Баня в Подмосковье, 19.12.24
</div>
<a class="completed-objects__link" href="/interesnoe/portfolio-proektov/ustanovka-septika-v-banyu/">Подробнее</a>
</div>
<div class="reviews__item swiper-slide">
<div class="reviews__author reviews__author--with-icon">
<div class="reviews__author-icon">А</div>
<div class="reviews__author-name">Анатолий Матвеевич</div>
<div class="reviews__author-city">г. Одинцово</div>
</div>
<h3 class="reviews__name">Монтаж септиков</h3>
<div class="reviews__message">
В своем новом доме не хотелось пользоваться выгребной ямой. Тем более что после посещения ассенизаторов остается неприятный запах. Искали и приобрели автономную канализацию ЭРА. Доступные цены и качественный монтаж в
короткие сроки. После его установки недолгое время присматривался, а потом забыл на два года пока не пришло время обслуживать. Порекомендовали систему ЭРА соседям. Они поступили мудро и оборудовали сразу три дома одной
системой. Рекомнедую!!!
<h3 class="completed-objects__title"><a href="/interesnoe/portfolio-proektov/ustanovka-septika-v-banyu/">Установка септика в бане</a></h3>
<p class="completed-objects__info">
Клиент захотел септик для бани под ключ на 5 человек
</p>
<h4 class="completed-objects__sub">Что было сделано:</h4>
<ul class="completed-objects__data">
<li class="completed-objects__data-item">Учли все сложности, пожелания, согласовали смету </li>
<li class="completed-objects__data-item">Осуществили свои обязанности перед заказчиком в короткие сроки </li>
</ul>
</div>
<div class="reviews__value">
<div class="reviews__date">06.06.23</div>
<div class="reviews__rating rating rating--4">4/5</div>
<div class="completed-objects__item">
<div class="completed-objects__image" style="background-image: url('/local/templates/EraSeptik/images/webp/портфолио-баня.webp');">
<div class="completed-objects__image-details">
<div>
Частный дом в Подмосковье, 10.02.25
</div>
<a class="completed-objects__link" href="/interesnoe/portfolio-proektov/ustanovka-septika-dlya-chastnogo-doma/">Подробнее</a>
</div>
<div class="reviews__item swiper-slide">
<div class="reviews__author reviews__author--with-icon">
<div class="reviews__author-icon">Е</div>
<div class="reviews__author-name">Евгения</div>
<div class="reviews__author-city">г. Подольск</div>
</div>
<h3 class="reviews__name">Монтаж септиков</h3>
<div class="reviews__message">
В своем новом доме не хотелось пользоваться выгребной ямой. Тем более что после посещения ассенизаторов остается неприятный запах. Искали и приобрели автономную канализацию ЭРА. Доступные цены и качественный монтаж в
короткие сроки. После его установки недолгое время присматривался, а потом забыл на два года пока не пришло время обслуживать. Порекомендовали систему ЭРА соседям. Они поступили мудро и оборудовали сразу три дома одной
системой. Рекомнедую!!!
<h3 class="completed-objects__title"><a href="/interesnoe/portfolio-proektov/ustanovka-septika-dlya-chastnogo-doma/">Установка септика в частный дом</a></h3>
<p class="completed-objects__info">
Клиент нуждался в септике для дома под ключ на 4 человека
</p>
<h4 class="completed-objects__sub">Что было сделано:</h4>
<ul class="completed-objects__data">
<li class="completed-objects__data-item">Выявили потребность, запустили проект в работу</li>
<li class="completed-objects__data-item">Произвели все необходимые действия, сдали объект по акту приёма передачи </li>
</ul>
</div>
<div class="reviews__value">
<div class="reviews__date">06.06.23</div>
<div class="reviews__rating rating rating--4">4/5</div>
<div class="completed-objects__item completed-objects__item--green">
<h3 class="completed-objects__title">Вы можете ознакомиться с другими проектами в нашем портфолио</h3>
<a class="completed-objects__link" href="/interesnoe/portfolio-proektov/">Перейти к другим работам</a>
</div>
</div>
</div>
</section>
<div class="reviews__item swiper-slide">
<div class="reviews__author reviews__author--with-icon">
<div class="reviews__author-icon">А</div>
<div class="reviews__author-name">Анатолий Матвеевич</div>
<div class="reviews__author-city">г. Одинцово</div>
</div>
<h3 class="reviews__name">Монтаж септиков</h3>
<div class="reviews__message">
В своем новом доме не хотелось пользоваться выгребной ямой. Тем более что после посещения ассенизаторов остается неприятный запах. Искали и приобрели автономную канализацию ЭРА. Доступные цены и качественный монтаж в
короткие сроки. После его установки недолгое время присматривался, а потом забыл на два года пока не пришло время обслуживать. Порекомендовали систему ЭРА соседям. Они поступили мудро и оборудовали сразу три дома одной
системой. Рекомнедую!!!
</div>
<div class="reviews__value">
<div class="reviews__date">06.06.23</div>
<div class="reviews__rating rating rating--4">4/5</div>
</div>
</div>
<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_SHOW" => "file",
"PATH" => "/include/reviews.php"
)
);?>
<div class="reviews__item swiper-slide">
<div class="reviews__author reviews__author--with-icon">
<div class="reviews__author-icon">Е</div>
<div class="reviews__author-name">Евгения</div>
<div class="reviews__author-city">г. Подольск</div>
</div>
<h3 class="reviews__name">Монтаж септиков</h3>
<div class="reviews__message">
В своем новом доме не хотелось пользоваться выгребной ямой. Тем более что после посещения ассенизаторов остается неприятный запах. Искали и приобрели автономную канализацию ЭРА. Доступные цены и качественный монтаж в
короткие сроки. После его установки недолгое время присматривался, а потом забыл на два года пока не пришло время обслуживать. Порекомендовали систему ЭРА соседям. Они поступили мудро и оборудовали сразу три дома одной
системой. Рекомнедую!!!
</div>
<div class="reviews__value">
<div class="reviews__date">06.06.23</div>
<div class="reviews__rating rating rating--4">4/5</div>
</div>
</div>
</div>
</div>
</section>
<section class="about-company section">
<div class="container">
@ -489,114 +382,122 @@ $APPLICATION->SetTitle("ЭраСептик");
<div class="about-company__description">
Давайте знакомиться ближе 🤍
</div>
<a class="about-company__link" href="#"> Читать о компании </a>
<a class="about-company__link" href="/about"> Читать о компании </a>
</div>
</div>
</div>
</section>
<section class="blog section">
<div class="container">
<section class="blog section">
<div class="container">
<h2 class="section-title">Мы ведем профессиональный блог</h2>
<div class="blog__list">
<div class="blog__item">
<div class="blog__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/blog-image1.png');">
<div class="blog__image" style="background-image: url('/local/templates/EraSeptik/images/webp/виды-частный-дом-статья.webp')">
<div class="blog__detail">
<div>20.05.24</div>
<a class="blog__link" href="#">Читать статью</a>
<div>
20.05.24
</div>
<a class="blog__link" href="/interesnoe/blog-pro-septiki/vidy-septikov-dlya-chastnogo-doma/">Читать статью</a>
</div>
</div>
<div class="blog__content">
<div class="blog__tag-list">
<div class="blog__tag-item">Инструкция</div>
<div class="blog__tag-item">Советы</div>
<div class="blog__tag-item">История</div>
<div class="blog__tag-item">
Инструкция
</div>
<div class="blog__tag-item">
Советы
</div>
<h3 class="blog__title">
Типы локальных очистных сооружений: как выбрать подходящее решение для вашего участка
</h3>
</div>
<h3 class="blog__title"><a href="/interesnoe/blog-pro-septiki/vidy-septikov-dlya-chastnogo-doma/">
Виды септиков для частного дома</a> </h3>
<div class="blog__description">
Выбор септика для дачи — важная задача, от которой зависит комфорт и экологическая безопасность вашего загородного участка. В этом посте мы рассмотрим ключевые факторы, которые стоит учесть при выборе септика: объем,
тип системы, материал изготовления, а также нюансы монтажа и эксплуатации. Узнайте, как сделать ваш выбор осознанным и избежать распространенных ошибок, чтобы ваша дача всегда оставалась чистым и уютным местом для
отдыха!
При строительстве загородного дома или дачи особое внимание стоит уделить организации системы очистки сточных вод.
</div>
</div>
</div>
<div class="blog__item">
<div class="blog__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/blog-image4.png');">
<div class="blog__image" style="background-image: url('/local/templates/EraSeptik/images/jpg/gl-sdachi-st.webp')">
<div class="blog__detail">
<div>20.05.24</div>
<a class="blog__link" href="#">Читать статью</a>
<div>
20.09.24
</div>
<a class="blog__link" href="/interesnoe/blog-pro-septiki/kakoy-septik-dlya-dachi-vybrat/">Читать статью</a>
</div>
</div>
<div class="blog__content">
<div class="blog__tag-list">
<div class="blog__tag-item">Инструкция</div>
<div class="blog__tag-item">Советы</div>
<div class="blog__tag-item">
Инструкция
</div>
<h3 class="blog__title">Как правильно подплетать дредлоки самому</h3>
<div class="blog__tag-item">
Советы
</div>
</div>
<h3 class="blog__title"><a href="/interesnoe/blog-pro-septiki/kakoy-septik-dlya-dachi-vybrat/">Септики для дачи: Руководство по выбору и установке</a></h3>
<div class="blog__description">
Выбор септика для дачи — важная задача, от которой зависит комфорт и экологическая безопасность вашего загородного участка. В этом посте мы рассмотрим ключевые факторы, которые стоит учесть при выборе септика: объем,
тип системы, материал изготовления, а также нюансы монтажа и эксплуатации. Узнайте, как сделать ваш выбор осознанным и избежать распространенных ошибок, чтобы ваша дача всегда оставалась чистым и уютным местом для
отдыха!
Существует три основных типа септиков, которые чаще всего применяются на дачных участках. Каждый из них имеет свои особенности, преимущества и требования к эксплуатации.
</div>
</div>
</div>
<div class="blog__item">
<div class="blog__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/blog-image2.png');">
<div class="blog__image" style="background-image: url('/local/templates/EraSeptik/images/webp/gl-ak-st.webp')">
<div class="blog__detail">
<div>20.05.24</div>
<a class="blog__link" href="#">Читать статью</a>
<div>
11.01.24
</div>
<a class="blog__link" href="/interesnoe/blog-pro-septiki/avtonomnaya-kanalizatsiya-kak-vybrat/">Читать статью</a>
</div>
</div>
<div class="blog__content">
<div class="blog__tag-list">
<div class="blog__tag-item">Советы</div>
<div class="blog__tag-item">История</div>
<div class="blog__tag-item">
Советы
</div>
<div class="blog__tag-item">
Инструкция
</div>
</div>
<h3 class="blog__title">
Плюсы и минусы использования автономных канализационных систем на даче
</h3>
<h3 class="blog__title"><a href="/interesnoe/blog-pro-septiki/avtonomnaya-kanalizatsiya-kak-vybrat/">
Автономная канализация для частного дома и дачи: Как выбрать лучшую систему и правильно ее установить</a> </h3>
<div class="blog__description">
Выбор септика для дачи — важная задача, от которой зависит комфорт и экологическая безопасность вашего загородного участка. В этом посте мы рассмотрим ключевые факторы, которые стоит учесть при выборе септика: объем,
тип системы, материал изготовления, а также нюансы монтажа и эксплуатации. Узнайте, как сделать ваш выбор осознанным и избежать распространенных ошибок, чтобы ваша дача всегда оставалась чистым и уютным местом для
отдыха!
В отсутствие подключения к централизованной системе, выбор подходящей канализационной установки становится ключевым для эффективной утилизации сточных вод.
</div>
</div>
</div>
<div class="blog__item">
<div class="blog__image" style="background-image: url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/blog-image3.png');">
<div class="blog__image" style="background-image: url('/local/templates/EraSeptik/images/webp/gl-sbo-st.webp')">
<div class="blog__detail">
<div>20.05.24</div>
<a class="blog__link" href="#">Читать статью</a>
<div>
05.05.24
</div>
<a class="blog__link" href="/interesnoe/blog-pro-septiki/stantsii-biologicheskoy-ochistki-pravilnyy-vybor/">Читать статью</a>
</div>
</div>
<div class="blog__content">
<div class="blog__tag-list">
<div class="blog__tag-item">История</div>
<div class="blog__tag-item">Инструкция</div>
<div class="blog__tag-item">
История
</div>
<div class="blog__tag-item">
Инструкция
</div>
<h3 class="blog__title">
Монтаж и обслуживание локальных очистных сооружений: что нужно знать
</h3>
</div>
<h3 class="blog__title"><a href="/interesnoe/blog-pro-septiki/stantsii-biologicheskoy-ochistki-pravilnyy-vybor/">
Станции биологической очистки: принцип работы и правильный выбор</a> </h3>
<div class="blog__description">
Выбор септика для дачи — важная задача, от которой зависит комфорт и экологическая безопасность вашего загородного участка. В этом посте мы рассмотрим ключевые факторы, которые стоит учесть при выборе септика: объем,
тип системы, материал изготовления, а также нюансы монтажа и эксплуатации. Узнайте, как сделать ваш выбор осознанным и избежать распространенных ошибок, чтобы ваша дача всегда оставалась чистым и уютным местом для
отдыха!
Для решения этого вопроса раньше использовались такие традиционные методы, как выгребные ямы и септики.
</div>
</div>
</div>
<div class="blog__item blog__item--green">
<div class="blog__more">
Читайте больше полезной информации в&nbsp;нашем блоге
</div>
<a class="blog__more-link"> Смотреть все статьи </a>
</div>
<a class="blog__more-link" href="/interesnoe/blog-pro-septiki/"> Смотреть все статьи </a>
</div>
</div>
</div>
</section>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

@ -0,0 +1,72 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
$this->setFrameMode(true);
if (isset($arResult['ITEM'])):
$productId = $arResult['ITEM']['ID'];
$priceRow = Bitrix\Catalog\PriceTable::getList([
'filter' => [
'PRODUCT_ID' => $productId,
'CATALOG_GROUP_ID' => 1
],
'select' => ['PRICE', 'CURRENCY']
])->fetch();
$salePrice = $arResult['ITEM']['PROPERTIES']['ATT_OLD_PRICE']['VALUE'];
$CHEL = $arResult['ITEM']['PROPERTIES']['CHEL']['VALUE'];
$SBROS_NUM = $arResult['ITEM']['PROPERTIES']['SBROS_NUM']['VALUE'];
$RECYCLE_VOL = $arResult['ITEM']['PROPERTIES']['RECYCLE_VOL']['VALUE'];
$reviews = $arResult['ITEM']['PROPERTIES']['REV_COMPLITE']['VALUE'];
$rating = function_exists('getAverageRating') ? getAverageRating($reviews) : 0;
?>
<div class="product">
<a class="product__image" href="<?= $arResult['ITEM']['DETAIL_PAGE_URL'] ?>">
<img src="<?= $arResult['ITEM']['PREVIEW_PICTURE']['SRC'] ?>" width="336" height="340" alt="<?= $arResult['ITEM']['NAME'] ?>">
</a>
<div class="product__data">
<div class="product__rating rating rating--<?= $rating ?>"><?= $rating ?>/5</div>
<div class="product__info">
<a class="product__title" href="<?= $arResult['ITEM']['DETAIL_PAGE_URL'] ?>">
<?= $arResult['ITEM']['NAME'] ?>
</a>
<?php if (!empty($arResult['ITEM']['PREVIEW_TEXT'])): ?>
<p class="product__text">
<?= $arResult['ITEM']['PREVIEW_TEXT'] ?>
</p>
<?php endif; ?>
</div>
<div class="product__info">
<?php if (!empty($CHEL)): ?>
<p class="product__text">
Пользователей: <span><?= $CHEL ?></span>
</p>
<?php endif; ?>
<?php if (!empty($SBROS_NUM)): ?>
<p class="product__text">
Залповый сброс, л: <span><?= $SBROS_NUM ?></span>
</p>
<?php endif; ?>
<?php if (!empty($RECYCLE_VOL)): ?>
<p class="product__text">
Объем переработки, л/сутки: <span><?= $RECYCLE_VOL ?></span>
</p>
<?php endif; ?>
</div>
<?php if (!empty($priceRow['PRICE'])): ?>
<div class="product__price">
<?= number_format($priceRow['PRICE'], 0, '', ' ') ?>
</div>
<?php endif; ?>
<form class="product__btns add-to-cart-form" action="<?=POST_FORM_ACTION_URI?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="<?echo $arParams["PRODUCT_QUANTITY_VARIABLE"]?>" value="1" class="form-control" id="QUANTITY<?= $arResult['ITEM']['ID'] ?>">
<input type="hidden" name="<?echo $arParams["ACTION_VARIABLE"]?>" value="ADD2BASKET">
<input type="hidden" name="ajax_basket" value="Y">
<input type="hidden" name="<?echo $arParams["PRODUCT_ID_VARIABLE"]?>" value="<?= $arResult['ITEM']['ID'] ?>" class="id-offer">
<button type="button" class="button button--orange" data-product="<?= $arResult['ITEM']['NAME'] ?>">
Купить
</button>
<button type="submit" class="button button--outline add-to-cart-button" name="<?echo $arParams["ACTION_VARIABLE"]."ADD2BASKET"?>">
Добавить в корзину
</button>
</form>
</div>
</div>
<?php endif; ?>

@ -0,0 +1,26 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
$this->setFrameMode(true);
?>
<?php if (!empty($arResult['ITEMS'])): ?>
<?php foreach ($arResult['ITEMS'] as $item): ?>
<?php
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'mainpage',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $this->GetEditAreaId($item['ID']),
'TYPE' => 'CARD',
),
'PARAMS' => $arParams
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?php endforeach; ?>
<?php else: ?>
<div>Товаров не найдено</div>
<?php endif; ?>

@ -0,0 +1,64 @@
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ELEMENT_SORT_FIELD" => $arParams["ELEMENT_SORT_FIELD"],
"ELEMENT_SORT_ORDER" => $arParams["ELEMENT_SORT_ORDER"],
"PAGE_ELEMENT_COUNT" => $arParams["PAGE_ELEMENT_COUNT"],
"LINE_ELEMENT_COUNT" => $arParams["LINE_ELEMENT_COUNT"],
"PROPERTY_CODE" => $arParams["LIST_PROPERTY_CODE"],
"OFFERS_CART_PROPERTIES" => $arParams["OFFERS_CART_PROPERTIES"],
"OFFERS_FIELD_CODE" => $arParams["LIST_OFFERS_FIELD_CODE"],
"OFFERS_PROPERTY_CODE" => $arParams["LIST_OFFERS_PROPERTY_CODE"],
"OFFERS_SORT_FIELD" => $arParams["OFFERS_SORT_FIELD"],
"OFFERS_SORT_ORDER" => $arParams["OFFERS_SORT_ORDER"],
"OFFERS_LIMIT" => $arParams["LIST_OFFERS_LIMIT"],
"SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
"DETAIL_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["element"],
"BASKET_URL" => $arParams["BASKET_URL"],
"ACTION_VARIABLE" => $arParams["ACTION_VARIABLE"],
"PRODUCT_ID_VARIABLE" => $arParams["PRODUCT_ID_VARIABLE"],
"PRODUCT_QUANTITY_VARIABLE" => $arParams["PRODUCT_QUANTITY_VARIABLE"],
"PRODUCT_PROPS_VARIABLE" => $arParams["PRODUCT_PROPS_VARIABLE"],
"SECTION_ID_VARIABLE" => $arParams["SECTION_ID_VARIABLE"],
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"DISPLAY_COMPARE" => $arParams["USE_COMPARE"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
"USE_PRICE_COUNT" => $arParams["USE_PRICE_COUNT"],
"SHOW_PRICE_COUNT" => $arParams["SHOW_PRICE_COUNT"],
"PRICE_VAT_INCLUDE" => $arParams["PRICE_VAT_INCLUDE"],
"PRODUCT_PROPERTIES" => $arParams["PRODUCT_PROPERTIES"],
"USE_PRODUCT_QUANTITY" => $arParams["USE_PRODUCT_QUANTITY"],
"CONVERT_CURRENCY" => $arParams["CONVERT_CURRENCY"],
"CURRENCY_ID" => $arParams["CURRENCY_ID"],
"DISPLAY_TOP_PAGER" => $arParams["DISPLAY_TOP_PAGER"],
"DISPLAY_BOTTOM_PAGER" => $arParams["DISPLAY_BOTTOM_PAGER"],
"PAGER_TITLE" => $arParams["PAGER_TITLE"],
"PAGER_SHOW_ALWAYS" => $arParams["PAGER_SHOW_ALWAYS"],
"PAGER_TEMPLATE" => $arParams["PAGER_TEMPLATE"],
"PAGER_DESC_NUMBERING" => $arParams["PAGER_DESC_NUMBERING"],
"PAGER_DESC_NUMBERING_CACHE_TIME" => $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"],
"PAGER_SHOW_ALL" => $arParams["PAGER_SHOW_ALL"],
"FILTER_NAME" => "arrFilter",
"SECTION_ID" => "",
"SECTION_CODE" => "",
"SECTION_USER_FIELDS" => array(),
"INCLUDE_SUBSECTIONS" => "Y",
"SHOW_ALL_WO_SECTION" => "Y",
"META_KEYWORDS" => "",
"META_DESCRIPTION" => "",
"BROWSER_TITLE" => "",
"ADD_SECTIONS_CHAIN" => "N",
"SET_TITLE" => "N",
"SET_STATUS_404" => "N",
"CACHE_FILTER" => "N",
"CACHE_GROUPS" => "N",
),
$component
);
?>

@ -0,0 +1,640 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var string $componentPath
* @var string $componentName
* @var array $arCurrentValues
* @var array $arTemplateParameters
*/
use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager;
use Bitrix\Main\Web\Json;
use Bitrix\Iblock;
if (!Loader::includeModule('iblock'))
return;
$boolCatalog = Loader::includeModule('catalog');
CBitrixComponent::includeComponentClass($componentName);
$usePropertyFeatures = Iblock\Model\PropertyFeature::isEnabledFeatures();
$iblockExists = (!empty($arCurrentValues['IBLOCK_ID']) && (int)$arCurrentValues['IBLOCK_ID'] > 0);
$defaultValue = array('-' => GetMessage('CP_BCS_TPL_PROP_EMPTY'));
$arSKU = false;
$boolSKU = false;
$filterDataValues = array();
if ($boolCatalog && (isset($arCurrentValues['IBLOCK_ID']) && 0 < intval($arCurrentValues['IBLOCK_ID'])))
{
$arSKU = CCatalogSku::GetInfoByProductIBlock($arCurrentValues['IBLOCK_ID']);
$boolSKU = !empty($arSKU) && is_array($arSKU);
$filterDataValues['iblockId'] = (int)$arCurrentValues['IBLOCK_ID'];
if ($boolSKU)
{
$filterDataValues['offersIblockId'] = $arSKU['IBLOCK_ID'];
}
}
$arThemes = array();
if (ModuleManager::isModuleInstalled('bitrix.eshop'))
{
$arThemes['site'] = GetMessage('CP_BCS_TPL_THEME_SITE');
}
$arThemesList = array(
'blue' => GetMessage('CP_BCS_TPL_THEME_BLUE'),
'green' => GetMessage('CP_BCS_TPL_THEME_GREEN'),
'red' => GetMessage('CP_BCS_TPL_THEME_RED'),
'yellow' => GetMessage('CP_BCS_TPL_THEME_YELLOW')
);
$dir = trim(preg_replace("'[\\\\/]+'", '/', __DIR__.'/themes/'));
if (is_dir($dir))
{
foreach ($arThemesList as $themeID => $themeName)
{
if (!is_file($dir.$themeID.'/style.css'))
continue;
$arThemes[$themeID] = $themeName;
}
}
$arTemplateParameters['TEMPLATE_THEME'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_TEMPLATE_THEME'),
'TYPE' => 'LIST',
'VALUES' => $arThemes,
'DEFAULT' => 'blue',
'ADDITIONAL_VALUES' => 'Y'
);
$lineElementCount = (int)($arCurrentValues['LINE_ELEMENT_COUNT'] ?? 3);
$pageElementCount = (int)($arCurrentValues['PAGE_ELEMENT_COUNT'] ?? 18);
$arTemplateParameters['PRODUCT_ROW_VARIANTS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_ROW_VARIANTS'),
'TYPE' => 'CUSTOM',
'BIG_DATA' => \Bitrix\Main\Analytics\Catalog::isOn() ? 'Y' : 'N',
'COUNT_PARAM_NAME' => 'PAGE_ELEMENT_COUNT',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'dragdrop_add'),
'JS_EVENT' => 'initDraggableAddControl',
'JS_MESSAGES' => Json::encode(array(
'variant' => GetMessage('CP_BCS_TPL_SETTINGS_VARIANT'),
'delete' => GetMessage('CP_BCS_TPL_SETTINGS_DELETE'),
'quantity' => GetMessage('CP_BCS_TPL_SETTINGS_QUANTITY'),
'quantityBigData' => GetMessage('CP_BCS_TPL_SETTINGS_QUANTITY_BIG_DATA')
)),
'JS_DATA' => Json::encode(CatalogSectionComponent::getTemplateVariantsMap()),
'DEFAULT' => Json::encode(CatalogSectionComponent::predictRowVariants($lineElementCount, $pageElementCount))
);
$arTemplateParameters['ENLARGE_PRODUCT'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'N',
'VALUES' => array(
'STRICT' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT_STRICT'),
'PROP' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT_PROP')
)
);
$arTemplateParameters['PRODUCT_BLOCKS_ORDER'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCKS_ORDER'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'dragdrop_order'),
'JS_EVENT' => 'initDraggableOrderControl',
'JS_DATA' => Json::encode(array(
'price' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_PRICE'),
'quantityLimit' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY_LIMIT'),
'quantity' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY'),
'buttons' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_BUTTONS'),
'props' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_PROPS'),
'sku' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_SKU')
)),
'DEFAULT' => 'price,props,sku,quantityLimit,quantity,buttons'
);
$arTemplateParameters['SHOW_SLIDER'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_SLIDER'),
'TYPE' => 'CHECKBOX',
'MULTIPLE' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'Y'
);
if (isset($arCurrentValues['SHOW_SLIDER']) && $arCurrentValues['SHOW_SLIDER'] === 'Y')
{
$arTemplateParameters['SLIDER_INTERVAL'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SLIDER_INTERVAL'),
'TYPE' => 'TEXT',
'MULTIPLE' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '3000'
);
$arTemplateParameters['SLIDER_PROGRESS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SLIDER_PROGRESS'),
'TYPE' => 'CHECKBOX',
'MULTIPLE' => 'N',
'REFRESH' => 'N',
'DEFAULT' => 'N'
);
}
$arAllPropList = array();
$arFilePropList = $defaultValue;
$arListPropList = array();
if ($iblockExists)
{
$rsProps = CIBlockProperty::GetList(
array('SORT' => 'ASC', 'ID' => 'ASC'),
array('IBLOCK_ID' => $arCurrentValues['IBLOCK_ID'], 'ACTIVE' => 'Y')
);
while ($arProp = $rsProps->Fetch())
{
$strPropName = '['.$arProp['ID'].']'.('' != $arProp['CODE'] ? '['.$arProp['CODE'].']' : '').' '.$arProp['NAME'];
if ($arProp['CODE'] == '')
{
$arProp['CODE'] = $arProp['ID'];
}
$arAllPropList[$arProp['CODE']] = $strPropName;
if ($arProp['PROPERTY_TYPE'] === 'F')
{
$arFilePropList[$arProp['CODE']] = $strPropName;
}
if ($arProp['PROPERTY_TYPE'] === 'L')
{
$arListPropList[$arProp['CODE']] = $strPropName;
}
}
$showedProperties = [];
if ($usePropertyFeatures)
{
if ($iblockExists)
{
$showedProperties = Iblock\Model\PropertyFeature::getListPageShowPropertyCodes(
$arCurrentValues['IBLOCK_ID'],
['CODE' => 'Y']
);
if ($showedProperties === null)
$showedProperties = [];
}
}
else
{
if (!empty($arCurrentValues['PROPERTY_CODE']) && is_array($arCurrentValues['PROPERTY_CODE']))
{
$showedProperties = $arCurrentValues['PROPERTY_CODE'];
}
}
if (!empty($showedProperties))
{
$selected = array();
foreach ($showedProperties as $code)
{
if (isset($arAllPropList[$code]))
{
$selected[$code] = $arAllPropList[$code];
}
}
$arTemplateParameters['PROPERTY_CODE_MOBILE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PROPERTY_CODE_MOBILE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'VALUES' => $selected
);
}
unset($showedProperties);
if (isset($arCurrentValues['ENLARGE_PRODUCT']) && $arCurrentValues['ENLARGE_PRODUCT'] === 'PROP')
{
$arTemplateParameters['ENLARGE_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ENLARGE_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $defaultValue + $arListPropList
);
}
if ($boolSKU)
{
$arTemplateParameters['PRODUCT_DISPLAY_MODE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_DISPLAY_MODE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'N',
'VALUES' => array(
'N' => GetMessage('CP_BCS_TPL_DML_SIMPLE'),
'Y' => GetMessage('CP_BCS_TPL_DML_EXT')
)
);
}
$arTemplateParameters['ADD_PICT_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ADD_PICT_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arFilePropList
);
$arTemplateParameters['LABEL_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'VALUES' => $arListPropList
);
if (isset($arCurrentValues['LABEL_PROP']) && !empty($arCurrentValues['LABEL_PROP']))
{
if (!is_array($arCurrentValues['LABEL_PROP']))
{
$arCurrentValues['LABEL_PROP'] = array($arCurrentValues['LABEL_PROP']);
}
$selected = array();
foreach ($arCurrentValues['LABEL_PROP'] as $name)
{
if (isset($arListPropList[$name]))
{
$selected[$name] = $arListPropList[$name];
}
}
$arTemplateParameters['LABEL_PROP_MOBILE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP_MOBILE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'VALUES' => $selected
);
unset($selected);
$arTemplateParameters['LABEL_PROP_POSITION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP_POSITION'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'position'),
'JS_EVENT' => 'initPositionControl',
'JS_DATA' => Json::encode(
array(
'positions' => array(
'top-left', 'top-center', 'top-right',
'middle-left', 'middle-center', 'middle-right',
'bottom-left', 'bottom-center', 'bottom-right'
),
'className' => ''
)
),
'DEFAULT' => 'top-left'
);
}
if ($boolSKU && isset($arCurrentValues['PRODUCT_DISPLAY_MODE']) && 'Y' == $arCurrentValues['PRODUCT_DISPLAY_MODE'])
{
$arAllOfferPropList = array();
$arFileOfferPropList = $arTreeOfferPropList = $defaultValue;
$rsProps = CIBlockProperty::GetList(
array('SORT' => 'ASC', 'ID' => 'ASC'),
array('IBLOCK_ID' => $arSKU['IBLOCK_ID'], 'ACTIVE' => 'Y')
);
while ($arProp = $rsProps->Fetch())
{
if ($arProp['ID'] == $arSKU['SKU_PROPERTY_ID'])
continue;
$arProp['USER_TYPE'] = (string)$arProp['USER_TYPE'];
$strPropName = '['.$arProp['ID'].']'.('' != $arProp['CODE'] ? '['.$arProp['CODE'].']' : '').' '.$arProp['NAME'];
if ('' == $arProp['CODE'])
$arProp['CODE'] = $arProp['ID'];
$arAllOfferPropList[$arProp['CODE']] = $strPropName;
if ('F' == $arProp['PROPERTY_TYPE'])
$arFileOfferPropList[$arProp['CODE']] = $strPropName;
if ('N' != $arProp['MULTIPLE'])
continue;
if (
'L' == $arProp['PROPERTY_TYPE']
|| 'E' == $arProp['PROPERTY_TYPE']
|| ('S' == $arProp['PROPERTY_TYPE'] && 'directory' == $arProp['USER_TYPE'] && CIBlockPriceTools::checkPropDirectory($arProp))
)
$arTreeOfferPropList[$arProp['CODE']] = $strPropName;
}
$arTemplateParameters['OFFER_ADD_PICT_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_OFFER_ADD_PICT_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arFileOfferPropList
);
if (!$usePropertyFeatures)
{
$arTemplateParameters['OFFER_TREE_PROPS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_OFFER_TREE_PROPS'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arTreeOfferPropList
);
}
}
}
if ($boolCatalog)
{
$arTemplateParameters['PRODUCT_SUBSCRIPTION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_SUBSCRIPTION'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'Y'
);
$arTemplateParameters['SHOW_DISCOUNT_PERCENT'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_DISCOUNT_PERCENT'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
if (isset($arCurrentValues['SHOW_DISCOUNT_PERCENT']) && $arCurrentValues['SHOW_DISCOUNT_PERCENT'] === 'Y')
{
$arTemplateParameters['DISCOUNT_PERCENT_POSITION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_DISCOUNT_PERCENT_POSITION'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'position'),
'JS_EVENT' => 'initPositionControl',
'JS_DATA' => Json::encode(
array(
'positions' => array(
'top-left', 'top-center', 'top-right',
'middle-left', 'middle-center', 'middle-right',
'bottom-left', 'bottom-center', 'bottom-right'
),
'className' => 'bx-pos-parameter-block-circle'
)
),
'DEFAULT' => 'bottom-right'
);
}
$arTemplateParameters['SHOW_OLD_PRICE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_OLD_PRICE'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N'
);
$arTemplateParameters['SHOW_MAX_QUANTITY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY'),
'TYPE' => 'LIST',
'REFRESH' => 'Y',
'MULTIPLE' => 'N',
'VALUES' => array(
'N' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_N'),
'Y' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_Y'),
'M' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_M')
),
'DEFAULT' => array('N'),
);
if (isset($arCurrentValues['SHOW_MAX_QUANTITY']))
{
if ($arCurrentValues['SHOW_MAX_QUANTITY'] !== 'N')
{
$arTemplateParameters['MESS_SHOW_MAX_QUANTITY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY_DEFAULT')
);
}
if ($arCurrentValues['SHOW_MAX_QUANTITY'] === 'M')
{
$arTemplateParameters['RELATIVE_QUANTITY_FACTOR'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_RELATIVE_QUANTITY_FACTOR'),
'TYPE' => 'STRING',
'DEFAULT' => '5'
);
$arTemplateParameters['MESS_RELATIVE_QUANTITY_MANY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY_DEFAULT')
);
$arTemplateParameters['MESS_RELATIVE_QUANTITY_FEW'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW_DEFAULT')
);
}
}
$arTemplateParameters['ADD_TO_BASKET_ACTION'] = array(
'PARENT' => 'BASKET',
'NAME' => GetMessage('CP_BCS_TPL_ADD_TO_BASKET_ACTION'),
'TYPE' => 'LIST',
'VALUES' => array(
'ADD' => GetMessage('ADD_TO_BASKET_ACTION_ADD'),
'BUY' => GetMessage('ADD_TO_BASKET_ACTION_BUY')
),
'DEFAULT' => 'ADD',
'REFRESH' => 'N'
);
$arTemplateParameters['SHOW_CLOSE_POPUP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_CLOSE_POPUP'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N',
);
}
$arTemplateParameters['MESS_BTN_BUY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_BUY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_BUY_DEFAULT')
);
$arTemplateParameters['LAZY_LOAD'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_LAZY_LOAD'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
$arTemplateParameters['MESS_BTN_LAZY_LOAD'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_LAZY_LOAD'),
'TYPE' => 'TEXT',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_LAZY_LOAD_DEFAULT'),
'HIDDEN' => (isset($arCurrentValues['LAZY_LOAD']) && $arCurrentValues['LAZY_LOAD'] === 'Y' ? 'N' : 'Y')
);
$arTemplateParameters['LOAD_ON_SCROLL'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_LOAD_ON_SCROLL'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N',
'HIDDEN' => (
(isset($arCurrentValues['LAZY_LOAD']) && $arCurrentValues['LAZY_LOAD'] === 'Y')
|| (isset($arCurrentValues['DISPLAY_TOP_PAGER']) && $arCurrentValues['DISPLAY_TOP_PAGER'] === 'Y')
|| (!isset($arCurrentValues['DISPLAY_BOTTOM_PAGER']) || $arCurrentValues['DISPLAY_BOTTOM_PAGER'] !== 'N')
? 'N'
: 'Y'
)
);
$arTemplateParameters['MESS_BTN_ADD_TO_BASKET'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET_DEFAULT')
);
$arTemplateParameters['MESS_BTN_SUBSCRIBE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_SUBSCRIBE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_SUBSCRIBE_DEFAULT')
);
if (isset($arCurrentValues['DISPLAY_COMPARE']) && $arCurrentValues['DISPLAY_COMPARE'] === 'Y')
{
$arTemplateParameters['MESS_BTN_COMPARE'] = array(
'PARENT' => 'COMPARE',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_COMPARE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_COMPARE_DEFAULT')
);
$arTemplateParameters['COMPARE_NAME'] = array(
'PARENT' => 'COMPARE',
'NAME' => GetMessage('CP_BCS_TPL_COMPARE_NAME'),
'TYPE' => 'STRING',
'DEFAULT' => 'CATALOG_COMPARE_LIST'
);
}
$arTemplateParameters['MESS_BTN_DETAIL'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_DETAIL'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_DETAIL_DEFAULT')
);
$arTemplateParameters['MESS_NOT_AVAILABLE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_DEFAULT')
);
$arTemplateParameters['MESS_NOT_AVAILABLE_SERVICE'] = [
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE_DEFAULT'),
];
if (\Bitrix\Main\Analytics\Catalog::isOn())
{
$arTemplateParameters['RCM_TYPE'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_TYPE_TITLE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'VALUES' => array(
// personal
'personal' => GetMessage('CP_BCS_TPL_PERSONAL'),
// general
'bestsell' => GetMessage('CP_BCS_TPL_BESTSELLERS'),
// item2item
'similar_sell' => GetMessage('CP_BCS_TPL_SOLD_WITH'),
'similar_view' => GetMessage('CP_BCS_TPL_VIEWED_WITH'),
'similar' => GetMessage('CP_BCS_TPL_SIMILAR'),
// randomly distributed
'any_similar' => GetMessage('CP_BCS_TPL_SIMILAR_ANY'),
'any_personal' => GetMessage('CP_BCS_TPL_PERSONAL_WBEST'),
'any' => GetMessage('CP_BCS_TPL_RAND')
),
'DEFAULT' => 'personal'
);
$arTemplateParameters['RCM_PROD_ID'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_ID_PARAM'),
'TYPE' => 'STRING',
'DEFAULT' => '={$_REQUEST["PRODUCT_ID"]}'
);
$arTemplateParameters['SHOW_FROM_SECTION'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_FROM_SECTION'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N'
);
}
$arTemplateParameters['USE_ENHANCED_ECOMMERCE'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_USE_ENHANCED_ECOMMERCE'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
if (isset($arCurrentValues['USE_ENHANCED_ECOMMERCE']) && $arCurrentValues['USE_ENHANCED_ECOMMERCE'] === 'Y')
{
$arTemplateParameters['DATA_LAYER_NAME'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_DATA_LAYER_NAME'),
'TYPE' => 'STRING',
'DEFAULT' => 'dataLayer'
);
$arTemplateParameters['BRAND_PROPERTY'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_BRAND_PROPERTY'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'DEFAULT' => '',
'VALUES' => $defaultValue + $arAllPropList
);
}

@ -0,0 +1,63 @@
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var array $arParams
* @var array $templateData
* @var string $templateFolder
* @var CatalogSectionComponent $component
*/
global $APPLICATION;
if (isset($templateData['TEMPLATE_THEME']))
{
$APPLICATION->SetAdditionalCSS($templateFolder.'/themes/'.$templateData['TEMPLATE_THEME'].'/style.css');
$APPLICATION->SetAdditionalCSS('/bitrix/css/main/themes/'.$templateData['TEMPLATE_THEME'].'/style.css', true);
}
if (!empty($templateData['TEMPLATE_LIBRARY']))
{
$loadCurrency = false;
if (!empty($templateData['CURRENCIES']))
{
$loadCurrency = \Bitrix\Main\Loader::includeModule('currency');
}
CJSCore::Init($templateData['TEMPLATE_LIBRARY']);
if ($loadCurrency)
{
?>
<script>
BX.Currency.setCurrencies(<?=$templateData['CURRENCIES']?>);
</script>
<?
}
}
// lazy load and big data json answers
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
if ($request->isAjaxRequest() && ($request->get('action') === 'showMore' || $request->get('action') === 'deferredLoad'))
{
$content = ob_get_contents();
ob_end_clean();
[, $itemsContainer] = explode('<!-- items-container -->', $content);
$paginationContainer = '';
if ($templateData['USE_PAGINATION_CONTAINER'])
{
[, $paginationContainer] = explode('<!-- pagination-container -->', $content);
}
[, $epilogue] = explode('<!-- component-end -->', $content);
if (isset($arParams['AJAX_MODE']) && $arParams['AJAX_MODE'] === 'Y')
{
$component->prepareLinks($paginationContainer);
}
$component::sendJsonAnswer(array(
'items' => $itemsContainer,
'pagination' => $paginationContainer,
'epilogue' => $epilogue,
));
}

@ -0,0 +1,107 @@
<?
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
if (!function_exists('getDoublePicturesForItem'))
{
function getDoublePicturesForItem(&$item, $propertyCode)
{
$result = array(
'PICT' => false,
'SECOND_PICT' => false
);
if (!empty($item) && is_array($item))
{
if (!empty($item['PREVIEW_PICTURE']))
{
if (!is_array($item['PREVIEW_PICTURE']))
$item['PREVIEW_PICTURE'] = CFile::GetFileArray($item['PREVIEW_PICTURE']);
if (isset($item['PREVIEW_PICTURE']['ID']))
{
$result['PICT'] = array(
'ID' => intval($item['PREVIEW_PICTURE']['ID']),
'SRC' => $item['PREVIEW_PICTURE']['SRC'],
'WIDTH' => intval($item['PREVIEW_PICTURE']['WIDTH']),
'HEIGHT' => intval($item['PREVIEW_PICTURE']['HEIGHT'])
);
}
}
if (!empty($item['DETAIL_PICTURE']))
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
if (!is_array($item['DETAIL_PICTURE']))
$item['DETAIL_PICTURE'] = CFile::GetFileArray($item['DETAIL_PICTURE']);
if (isset($item['DETAIL_PICTURE']['ID']))
{
$result[$keyPict] = array(
'ID' => intval($item['DETAIL_PICTURE']['ID']),
'SRC' => $item['DETAIL_PICTURE']['SRC'],
'WIDTH' => intval($item['DETAIL_PICTURE']['WIDTH']),
'HEIGHT' => intval($item['DETAIL_PICTURE']['HEIGHT'])
);
}
}
if (empty($result['SECOND_PICT']))
{
if (
'' != $propertyCode &&
isset($item['PROPERTIES'][$propertyCode]) &&
'F' == $item['PROPERTIES'][$propertyCode]['PROPERTY_TYPE']
)
{
if (
isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) &&
!empty($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE'])
)
{
$fileValues = (
isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']['ID']) ?
array(0 => $item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) :
$item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']
);
foreach ($fileValues as &$oneFileValue)
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
$result[$keyPict] = array(
'ID' => intval($oneFileValue['ID']),
'SRC' => $oneFileValue['SRC'],
'WIDTH' => intval($oneFileValue['WIDTH']),
'HEIGHT' => intval($oneFileValue['HEIGHT'])
);
if ('SECOND_PICT' == $keyPict)
break;
}
if (isset($oneFileValue))
unset($oneFileValue);
}
else
{
$propValues = $item['PROPERTIES'][$propertyCode]['VALUE'];
if (!is_array($propValues))
$propValues = array($propValues);
foreach ($propValues as &$oneValue)
{
$oneFileValue = CFile::GetFileArray($oneValue);
if (isset($oneFileValue['ID']))
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
$result[$keyPict] = array(
'ID' => intval($oneFileValue['ID']),
'SRC' => $oneFileValue['SRC'],
'WIDTH' => intval($oneFileValue['WIDTH']),
'HEIGHT' => intval($oneFileValue['HEIGHT'])
);
if ('SECOND_PICT' == $keyPict)
break;
}
}
if (isset($oneValue))
unset($oneValue);
}
}
}
}
return $result;
}
}
?>

@ -0,0 +1,9 @@
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var CBitrixComponentTemplate $this
* @var CatalogSectionComponent $component
*/
$component = $this->getComponent();
$arParams = $component->applyTemplateModifications();

@ -0,0 +1,359 @@
(function() {
'use strict';
if (!!window.JCCatalogSectionComponent)
return;
window.JCCatalogSectionComponent = function(params) {
this.formPosting = false;
this.siteId = params.siteId || '';
this.ajaxId = params.ajaxId || '';
this.template = params.template || '';
this.componentPath = params.componentPath || '';
this.parameters = params.parameters || '';
if (params.navParams)
{
this.navParams = {
NavNum: params.navParams.NavNum || 1,
NavPageNomer: parseInt(params.navParams.NavPageNomer) || 1,
NavPageCount: parseInt(params.navParams.NavPageCount) || 1
};
}
this.bigData = params.bigData || {enabled: false};
this.container = document.querySelector('[data-entity="' + params.container + '"]');
this.showMoreButton = null;
this.showMoreButtonMessage = null;
if (this.bigData.enabled && BX.util.object_keys(this.bigData.rows).length > 0)
{
BX.cookie_prefix = this.bigData.js.cookiePrefix || '';
BX.cookie_domain = this.bigData.js.cookieDomain || '';
BX.current_server_time = this.bigData.js.serverTime;
BX.ready(BX.delegate(this.bigDataLoad, this));
}
if (params.initiallyShowHeader)
{
BX.ready(BX.delegate(this.showHeader, this));
}
if (params.deferredLoad)
{
BX.ready(BX.delegate(this.deferredLoad, this));
}
if (params.lazyLoad)
{
this.showMoreButton = document.querySelector('[data-use="show-more-' + this.navParams.NavNum + '"]');
this.showMoreButtonMessage = this.showMoreButton.innerHTML;
BX.bind(this.showMoreButton, 'click', BX.proxy(this.showMore, this));
}
if (params.loadOnScroll)
{
BX.bind(window, 'scroll', BX.proxy(this.loadOnScroll, this));
}
};
window.JCCatalogSectionComponent.prototype =
{
checkButton: function()
{
if (this.showMoreButton)
{
if (this.navParams.NavPageNomer == this.navParams.NavPageCount)
{
BX.remove(this.showMoreButton);
}
else
{
this.container.appendChild(this.showMoreButton);
}
}
},
enableButton: function()
{
if (this.showMoreButton)
{
BX.removeClass(this.showMoreButton, 'disabled');
this.showMoreButton.innerHTML = this.showMoreButtonMessage;
}
},
disableButton: function()
{
if (this.showMoreButton)
{
BX.addClass(this.showMoreButton, 'disabled');
this.showMoreButton.innerHTML = BX.message('BTN_MESSAGE_LAZY_LOAD_WAITER');
}
},
loadOnScroll: function()
{
var scrollTop = BX.GetWindowScrollPos().scrollTop,
containerBottom = BX.pos(this.container).bottom;
if (scrollTop + window.innerHeight > containerBottom)
{
this.showMore();
}
},
showMore: function()
{
if (this.navParams.NavPageNomer < this.navParams.NavPageCount)
{
var data = {};
data['action'] = 'showMore';
data['PAGEN_' + this.navParams.NavNum] = this.navParams.NavPageNomer + 1;
if (!this.formPosting)
{
this.formPosting = true;
this.disableButton();
this.sendRequest(data);
}
}
},
bigDataLoad: function()
{
var url = 'https://analytics.bitrix.info/crecoms/v1_0/recoms.php',
data = BX.ajax.prepareData(this.bigData.params);
if (data)
{
url += (url.indexOf('?') !== -1 ? '&' : '?') + data;
}
var onReady = BX.delegate(function(result){
this.sendRequest({
action: 'deferredLoad',
bigData: 'Y',
items: result && result.items || [],
rid: result && result.id,
count: this.bigData.count,
rowsRange: this.bigData.rowsRange,
shownIds: this.bigData.shownIds
});
}, this);
BX.ajax({
method: 'GET',
dataType: 'json',
url: url,
timeout: 3,
onsuccess: onReady,
onfailure: onReady
});
},
deferredLoad: function()
{
this.sendRequest({action: 'deferredLoad'});
},
sendRequest: function(data)
{
var defaultData = {
siteId: this.siteId,
template: this.template,
parameters: this.parameters
};
if (this.ajaxId)
{
defaultData.AJAX_ID = this.ajaxId;
}
BX.ajax({
url: this.componentPath + '/ajax.php' + (document.location.href.indexOf('clear_cache=Y') !== -1 ? '?clear_cache=Y' : ''),
method: 'POST',
dataType: 'json',
timeout: 60,
data: BX.merge(defaultData, data),
onsuccess: BX.delegate(function(result){
if (!result || !result.JS)
return;
BX.ajax.processScripts(
BX.processHTML(result.JS).SCRIPT,
false,
BX.delegate(function(){this.showAction(result, data);}, this)
);
}, this)
});
},
showAction: function(result, data)
{
if (!data)
return;
switch (data.action)
{
case 'showMore':
this.processShowMoreAction(result);
break;
case 'deferredLoad':
this.processDeferredLoadAction(result, data.bigData === 'Y');
break;
}
},
processShowMoreAction: function(result)
{
this.formPosting = false;
this.enableButton();
if (result)
{
this.navParams.NavPageNomer++;
this.processItems(result.items);
this.processPagination(result.pagination);
this.processEpilogue(result.epilogue);
this.checkButton();
}
},
processDeferredLoadAction: function(result, bigData)
{
if (!result)
return;
var position = bigData ? this.bigData.rows : {};
this.processItems(result.items, BX.util.array_keys(position));
},
processItems: function(itemsHtml, position)
{
if (!itemsHtml)
return;
var processed = BX.processHTML(itemsHtml, false),
temporaryNode = BX.create('DIV');
var items, k, origRows;
temporaryNode.innerHTML = processed.HTML;
items = temporaryNode.querySelectorAll('[data-entity="items-row"]');
if (items.length)
{
this.showHeader(true);
for (k in items)
{
if (items.hasOwnProperty(k))
{
origRows = position ? this.container.querySelectorAll('[data-entity="items-row"]') : false;
items[k].style.opacity = 0;
if (origRows && BX.type.isDomNode(origRows[position[k]]))
{
origRows[position[k]].parentNode.insertBefore(items[k], origRows[position[k]]);
}
else
{
this.container.appendChild(items[k]);
}
}
}
new BX.easing({
duration: 2000,
start: {opacity: 0},
finish: {opacity: 100},
transition: BX.easing.makeEaseOut(BX.easing.transitions.quad),
step: function(state){
for (var k in items)
{
if (items.hasOwnProperty(k))
{
items[k].style.opacity = state.opacity / 100;
}
}
},
complete: function(){
for (var k in items)
{
if (items.hasOwnProperty(k))
{
items[k].removeAttribute('style');
}
}
}
}).animate();
}
BX.ajax.processScripts(processed.SCRIPT);
},
processPagination: function(paginationHtml)
{
if (!paginationHtml)
return;
var pagination = document.querySelectorAll('[data-pagination-num="' + this.navParams.NavNum + '"]');
for (var k in pagination)
{
if (pagination.hasOwnProperty(k))
{
pagination[k].innerHTML = paginationHtml;
}
}
},
processEpilogue: function(epilogueHtml)
{
if (!epilogueHtml)
return;
var processed = BX.processHTML(epilogueHtml, false);
BX.ajax.processScripts(processed.SCRIPT);
},
showHeader: function(animate)
{
var parentNode = BX.findParent(this.container, {attr: {'data-entity': 'parent-container'}}),
header;
if (parentNode && BX.type.isDomNode(parentNode))
{
header = parentNode.querySelector('[data-entity="header"]');
if (header && header.getAttribute('data-showed') != 'true')
{
header.style.display = '';
if (animate)
{
new BX.easing({
duration: 2000,
start: {opacity: 0},
finish: {opacity: 100},
transition: BX.easing.makeEaseOut(BX.easing.transitions.quad),
step: function(state){
header.style.opacity = state.opacity / 100;
},
complete: function(){
header.removeAttribute('style');
header.setAttribute('data-showed', 'true');
}
}).animate();
}
else
{
header.style.opacity = 100;
}
}
}
}
};
})();

@ -0,0 +1,804 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog\ProductTable;
/**
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CatalogSectionComponent $component
* @var CBitrixComponentTemplate $this
* @var string $templateName
* @var string $componentPath
*
* _________________________________________________________________________
* | Attention!
* | The following comments are for system use
* | and are required for the component to work correctly in ajax mode:
* | <!-- items-container -->
* | <!-- pagination-container -->
* | <!-- component-end -->
*/
$this->setFrameMode(true);
if (!empty($arResult['NAV_RESULT']))
{
$navParams = array(
'NavPageCount' => $arResult['NAV_RESULT']->NavPageCount,
'NavPageNomer' => $arResult['NAV_RESULT']->NavPageNomer,
'NavNum' => $arResult['NAV_RESULT']->NavNum
);
}
else
{
$navParams = array(
'NavPageCount' => 1,
'NavPageNomer' => 1,
'NavNum' => $this->randString()
);
}
$showTopPager = false;
$showBottomPager = false;
$showLazyLoad = false;
if ($arParams['PAGE_ELEMENT_COUNT'] > 0 && $navParams['NavPageCount'] > 1)
{
$showTopPager = $arParams['DISPLAY_TOP_PAGER'];
$showBottomPager = $arParams['DISPLAY_BOTTOM_PAGER'];
$showLazyLoad = $arParams['LAZY_LOAD'] === 'Y' && $navParams['NavPageNomer'] != $navParams['NavPageCount'];
}
$templateLibrary = array('popup', 'ajax', 'fx');
$currencyList = '';
if (!empty($arResult['CURRENCIES']))
{
$templateLibrary[] = 'currency';
$currencyList = CUtil::PhpToJSObject($arResult['CURRENCIES'], false, true, true);
}
$templateData = array(
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'TEMPLATE_LIBRARY' => $templateLibrary,
'CURRENCIES' => $currencyList,
'USE_PAGINATION_CONTAINER' => $showTopPager || $showBottomPager,
);
unset($currencyList, $templateLibrary);
$elementEdit = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_EDIT');
$elementDelete = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_DELETE');
$elementDeleteParams = array('CONFIRM' => GetMessage('CT_BCS_TPL_ELEMENT_DELETE_CONFIRM'));
$positionClassMap = array(
'left' => 'product-item-label-left',
'center' => 'product-item-label-center',
'right' => 'product-item-label-right',
'bottom' => 'product-item-label-bottom',
'middle' => 'product-item-label-middle',
'top' => 'product-item-label-top'
);
$discountPositionClass = '';
if ($arParams['SHOW_DISCOUNT_PERCENT'] === 'Y' && !empty($arParams['DISCOUNT_PERCENT_POSITION']))
{
foreach (explode('-', $arParams['DISCOUNT_PERCENT_POSITION']) as $pos)
{
$discountPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$labelPositionClass = '';
if (!empty($arParams['LABEL_PROP_POSITION']))
{
foreach (explode('-', $arParams['LABEL_PROP_POSITION']) as $pos)
{
$labelPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$arParams['~MESS_BTN_BUY'] = ($arParams['~MESS_BTN_BUY'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_BUY');
$arParams['~MESS_BTN_DETAIL'] = ($arParams['~MESS_BTN_DETAIL'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_DETAIL');
$arParams['~MESS_BTN_COMPARE'] = ($arParams['~MESS_BTN_COMPARE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_COMPARE');
$arParams['~MESS_BTN_SUBSCRIBE'] = ($arParams['~MESS_BTN_SUBSCRIBE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_SUBSCRIBE');
$arParams['~MESS_BTN_ADD_TO_BASKET'] = ($arParams['~MESS_BTN_ADD_TO_BASKET'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET');
$arParams['~MESS_NOT_AVAILABLE'] = ($arParams['~MESS_NOT_AVAILABLE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE');
$arParams['~MESS_NOT_AVAILABLE_SERVICE'] = ($arParams['~MESS_NOT_AVAILABLE_SERVICE'] ?? '') ?: Loc::getMessage('CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE');
$arParams['~MESS_SHOW_MAX_QUANTITY'] = ($arParams['~MESS_SHOW_MAX_QUANTITY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_SHOW_MAX_QUANTITY');
$arParams['~MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['~MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['~MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['~MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_BTN_LAZY_LOAD'] = $arParams['MESS_BTN_LAZY_LOAD'] ?: Loc::getMessage('CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD');
$obName = 'ob'.preg_replace('/[^a-zA-Z0-9_]/', 'x', $this->GetEditAreaId($navParams['NavNum']));
$containerName = 'container-'.$navParams['NavNum'];
if ($showTopPager)
{
?>
<div data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
<?
}
//if (!isset($arParams['HIDE_SECTION_DESCRIPTION']) || $arParams['HIDE_SECTION_DESCRIPTION'] !== 'Y')
//{
// ?>
<!-- <div class="bx-section-desc bx---><?php //=$arParams['TEMPLATE_THEME']?><!--">-->
<!-- <p class="bx-section-desc-post">--><?php //=$arResult['DESCRIPTION'] ?? ''?><!--</p>-->
<!-- </div>-->
<!-- --><?//
//}
//?>
<div class="catalog-page__sale sale js-display-list" data-entity="<?=$containerName?>">
<?
if (!empty($arResult['ITEMS']) && !empty($arResult['ITEM_ROWS']))
{
$generalParams = [
'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'],
'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
'SHOW_MAX_QUANTITY' => $arParams['SHOW_MAX_QUANTITY'],
'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
'MESS_SHOW_MAX_QUANTITY' => $arParams['~MESS_SHOW_MAX_QUANTITY'],
'MESS_RELATIVE_QUANTITY_MANY' => $arParams['~MESS_RELATIVE_QUANTITY_MANY'],
'MESS_RELATIVE_QUANTITY_FEW' => $arParams['~MESS_RELATIVE_QUANTITY_FEW'],
'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'],
'USE_PRODUCT_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
'PRODUCT_QUANTITY_VARIABLE' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
'ADD_PROPERTIES_TO_BASKET' => $arParams['ADD_PROPERTIES_TO_BASKET'],
'PRODUCT_PROPS_VARIABLE' => $arParams['PRODUCT_PROPS_VARIABLE'],
'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'],
'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
'COMPARE_PATH' => $arParams['COMPARE_PATH'],
'COMPARE_NAME' => $arParams['COMPARE_NAME'],
'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'],
'PRODUCT_BLOCKS_ORDER' => $arParams['PRODUCT_BLOCKS_ORDER'],
'LABEL_POSITION_CLASS' => $labelPositionClass,
'DISCOUNT_POSITION_CLASS' => $discountPositionClass,
'SLIDER_INTERVAL' => $arParams['SLIDER_INTERVAL'],
'SLIDER_PROGRESS' => $arParams['SLIDER_PROGRESS'],
'~BASKET_URL' => $arParams['~BASKET_URL'],
'~ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
'~BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE'],
'~COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
'~COMPARE_DELETE_URL_TEMPLATE' => $arResult['~COMPARE_DELETE_URL_TEMPLATE'],
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
'BRAND_PROPERTY' => $arParams['BRAND_PROPERTY'],
'MESS_BTN_BUY' => $arParams['~MESS_BTN_BUY'],
'MESS_BTN_DETAIL' => $arParams['~MESS_BTN_DETAIL'],
'MESS_BTN_COMPARE' => $arParams['~MESS_BTN_COMPARE'],
'MESS_BTN_SUBSCRIBE' => $arParams['~MESS_BTN_SUBSCRIBE'],
'MESS_BTN_ADD_TO_BASKET' => $arParams['~MESS_BTN_ADD_TO_BASKET'],
];
$areaIds = [];
$itemParameters = [];
foreach ($arResult['ITEMS'] as $item)
{
$uniqueId = $item['ID'].'_'.md5($this->randString().$component->getAction());
$areaIds[$item['ID']] = $this->GetEditAreaId($uniqueId);
$this->AddEditAction($uniqueId, $item['EDIT_LINK'], $elementEdit);
$this->AddDeleteAction($uniqueId, $item['DELETE_LINK'], $elementDelete, $elementDeleteParams);
$itemParameters[$item['ID']] = [
'SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']],
'MESS_NOT_AVAILABLE' => ($arResult['MODULES']['catalog'] && $item['PRODUCT']['TYPE'] === ProductTable::TYPE_SERVICE
? $arParams['~MESS_NOT_AVAILABLE_SERVICE']
: $arParams['~MESS_NOT_AVAILABLE']
),
];
}
?>
<?
foreach ($arResult['ITEM_ROWS'] as $rowData)
{
$rowItems = array_splice($arResult['ITEMS'], 0, $rowData['COUNT']);
?>
<div class="sale__products <?=$rowData['CLASS']?>" data-entity="items-row">
<?
switch ($rowData['VARIANT'])
{
case 0:
?>
<p>case 0</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<div class="col-xs-12 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = reset($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
</div>
</div>
<?
break;
case 1:
?>
<p>case 1</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 2:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 3:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 4:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 5:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 6:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 col-sm-4 col-md-2">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 7:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 8:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 9:
?>
<div class="col-xs-12">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-12 product-item-line-card">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
}
?>
</div>
<?
}
unset($rowItems);
unset($itemParameters);
unset($areaIds);
unset($generalParams);
?>
<!-- items-container -->
<?
}
?>
<!-- </div>-->
</div>
<div class="pagination">
<?
if ($showLazyLoad)
{
?>
<button class="more__btn button button--outline"
data-use="show-more-<?=$navParams['NavNum']?>">
<?=$arParams['MESS_BTN_LAZY_LOAD']?>
</button>
<?
}
if ($showBottomPager)
{
?>
<div class="pagination-list" data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
</div>
<?
}
$signer = new \Bitrix\Main\Security\Sign\Signer;
$signedTemplate = $signer->sign($templateName, 'catalog.section');
$signedParams = $signer->sign(base64_encode(serialize($arResult['ORIGINAL_PARAMETERS'])), 'catalog.section');
?>
<script>
BX.message({
BTN_MESSAGE_BASKET_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT')?>',
BASKET_URL: '<?=$arParams['BASKET_URL']?>',
ADD_TO_BASKET_OK: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
TITLE_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_ERROR')?>',
TITLE_BASKET_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_BASKET_PROPS')?>',
TITLE_SUCCESSFUL: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
BASKET_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR')?>',
BTN_MESSAGE_SEND_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS')?>',
BTN_MESSAGE_CLOSE: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE')?>',
BTN_MESSAGE_CLOSE_POPUP: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP')?>',
COMPARE_MESSAGE_OK: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_OK')?>',
COMPARE_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR')?>',
COMPARE_TITLE: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_TITLE')?>',
PRICE_TOTAL_PREFIX: '<?=GetMessageJS('CT_BCS_CATALOG_PRICE_TOTAL_PREFIX')?>',
RELATIVE_QUANTITY_MANY: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_MANY'])?>',
RELATIVE_QUANTITY_FEW: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_FEW'])?>',
BTN_MESSAGE_COMPARE_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT')?>',
BTN_MESSAGE_LAZY_LOAD: '<?=CUtil::JSEscape($arParams['MESS_BTN_LAZY_LOAD'])?>',
BTN_MESSAGE_LAZY_LOAD_WAITER: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER')?>',
SITE_ID: '<?=CUtil::JSEscape($component->getSiteId())?>'
});
var <?=$obName?> = new JCCatalogSectionComponent({
siteId: '<?=CUtil::JSEscape($component->getSiteId())?>',
componentPath: '<?=CUtil::JSEscape($componentPath)?>',
navParams: <?=CUtil::PhpToJSObject($navParams)?>,
deferredLoad: false,
initiallyShowHeader: '<?=!empty($arResult['ITEM_ROWS'])?>',
bigData: <?=CUtil::PhpToJSObject($arResult['BIG_DATA'])?>,
lazyLoad: !!'<?=$showLazyLoad?>',
loadOnScroll: !!'<?=($arParams['LOAD_ON_SCROLL'] === 'Y')?>',
template: '<?=CUtil::JSEscape($signedTemplate)?>',
ajaxId: '<?=CUtil::JSEscape($arParams['AJAX_ID'] ?? '')?>',
parameters: '<?=CUtil::JSEscape($signedParams)?>',
container: '<?=$containerName?>'
});
</script>
<!-- component-end -->

@ -0,0 +1,640 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var string $componentPath
* @var string $componentName
* @var array $arCurrentValues
* @var array $arTemplateParameters
*/
use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager;
use Bitrix\Main\Web\Json;
use Bitrix\Iblock;
if (!Loader::includeModule('iblock'))
return;
$boolCatalog = Loader::includeModule('catalog');
CBitrixComponent::includeComponentClass($componentName);
$usePropertyFeatures = Iblock\Model\PropertyFeature::isEnabledFeatures();
$iblockExists = (!empty($arCurrentValues['IBLOCK_ID']) && (int)$arCurrentValues['IBLOCK_ID'] > 0);
$defaultValue = array('-' => GetMessage('CP_BCS_TPL_PROP_EMPTY'));
$arSKU = false;
$boolSKU = false;
$filterDataValues = array();
if ($boolCatalog && (isset($arCurrentValues['IBLOCK_ID']) && 0 < intval($arCurrentValues['IBLOCK_ID'])))
{
$arSKU = CCatalogSku::GetInfoByProductIBlock($arCurrentValues['IBLOCK_ID']);
$boolSKU = !empty($arSKU) && is_array($arSKU);
$filterDataValues['iblockId'] = (int)$arCurrentValues['IBLOCK_ID'];
if ($boolSKU)
{
$filterDataValues['offersIblockId'] = $arSKU['IBLOCK_ID'];
}
}
$arThemes = array();
if (ModuleManager::isModuleInstalled('bitrix.eshop'))
{
$arThemes['site'] = GetMessage('CP_BCS_TPL_THEME_SITE');
}
$arThemesList = array(
'blue' => GetMessage('CP_BCS_TPL_THEME_BLUE'),
'green' => GetMessage('CP_BCS_TPL_THEME_GREEN'),
'red' => GetMessage('CP_BCS_TPL_THEME_RED'),
'yellow' => GetMessage('CP_BCS_TPL_THEME_YELLOW')
);
$dir = trim(preg_replace("'[\\\\/]+'", '/', __DIR__.'/themes/'));
if (is_dir($dir))
{
foreach ($arThemesList as $themeID => $themeName)
{
if (!is_file($dir.$themeID.'/style.css'))
continue;
$arThemes[$themeID] = $themeName;
}
}
$arTemplateParameters['TEMPLATE_THEME'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_TEMPLATE_THEME'),
'TYPE' => 'LIST',
'VALUES' => $arThemes,
'DEFAULT' => 'blue',
'ADDITIONAL_VALUES' => 'Y'
);
$lineElementCount = (int)($arCurrentValues['LINE_ELEMENT_COUNT'] ?? 3);
$pageElementCount = (int)($arCurrentValues['PAGE_ELEMENT_COUNT'] ?? 18);
$arTemplateParameters['PRODUCT_ROW_VARIANTS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_ROW_VARIANTS'),
'TYPE' => 'CUSTOM',
'BIG_DATA' => \Bitrix\Main\Analytics\Catalog::isOn() ? 'Y' : 'N',
'COUNT_PARAM_NAME' => 'PAGE_ELEMENT_COUNT',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'dragdrop_add'),
'JS_EVENT' => 'initDraggableAddControl',
'JS_MESSAGES' => Json::encode(array(
'variant' => GetMessage('CP_BCS_TPL_SETTINGS_VARIANT'),
'delete' => GetMessage('CP_BCS_TPL_SETTINGS_DELETE'),
'quantity' => GetMessage('CP_BCS_TPL_SETTINGS_QUANTITY'),
'quantityBigData' => GetMessage('CP_BCS_TPL_SETTINGS_QUANTITY_BIG_DATA')
)),
'JS_DATA' => Json::encode(CatalogSectionComponent::getTemplateVariantsMap()),
'DEFAULT' => Json::encode(CatalogSectionComponent::predictRowVariants($lineElementCount, $pageElementCount))
);
$arTemplateParameters['ENLARGE_PRODUCT'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'N',
'VALUES' => array(
'STRICT' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT_STRICT'),
'PROP' => GetMessage('CP_BCS_TPL_ENLARGE_PRODUCT_PROP')
)
);
$arTemplateParameters['PRODUCT_BLOCKS_ORDER'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCKS_ORDER'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'dragdrop_order'),
'JS_EVENT' => 'initDraggableOrderControl',
'JS_DATA' => Json::encode(array(
'price' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_PRICE'),
'quantityLimit' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY_LIMIT'),
'quantity' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY'),
'buttons' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_BUTTONS'),
'props' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_PROPS'),
'sku' => GetMessage('CP_BCS_TPL_PRODUCT_BLOCK_SKU')
)),
'DEFAULT' => 'price,props,sku,quantityLimit,quantity,buttons'
);
$arTemplateParameters['SHOW_SLIDER'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_SLIDER'),
'TYPE' => 'CHECKBOX',
'MULTIPLE' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'Y'
);
if (isset($arCurrentValues['SHOW_SLIDER']) && $arCurrentValues['SHOW_SLIDER'] === 'Y')
{
$arTemplateParameters['SLIDER_INTERVAL'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SLIDER_INTERVAL'),
'TYPE' => 'TEXT',
'MULTIPLE' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '3000'
);
$arTemplateParameters['SLIDER_PROGRESS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SLIDER_PROGRESS'),
'TYPE' => 'CHECKBOX',
'MULTIPLE' => 'N',
'REFRESH' => 'N',
'DEFAULT' => 'N'
);
}
$arAllPropList = array();
$arFilePropList = $defaultValue;
$arListPropList = array();
if ($iblockExists)
{
$rsProps = CIBlockProperty::GetList(
array('SORT' => 'ASC', 'ID' => 'ASC'),
array('IBLOCK_ID' => $arCurrentValues['IBLOCK_ID'], 'ACTIVE' => 'Y')
);
while ($arProp = $rsProps->Fetch())
{
$strPropName = '['.$arProp['ID'].']'.('' != $arProp['CODE'] ? '['.$arProp['CODE'].']' : '').' '.$arProp['NAME'];
if ($arProp['CODE'] == '')
{
$arProp['CODE'] = $arProp['ID'];
}
$arAllPropList[$arProp['CODE']] = $strPropName;
if ($arProp['PROPERTY_TYPE'] === 'F')
{
$arFilePropList[$arProp['CODE']] = $strPropName;
}
if ($arProp['PROPERTY_TYPE'] === 'L')
{
$arListPropList[$arProp['CODE']] = $strPropName;
}
}
$showedProperties = [];
if ($usePropertyFeatures)
{
if ($iblockExists)
{
$showedProperties = Iblock\Model\PropertyFeature::getListPageShowPropertyCodes(
$arCurrentValues['IBLOCK_ID'],
['CODE' => 'Y']
);
if ($showedProperties === null)
$showedProperties = [];
}
}
else
{
if (!empty($arCurrentValues['PROPERTY_CODE']) && is_array($arCurrentValues['PROPERTY_CODE']))
{
$showedProperties = $arCurrentValues['PROPERTY_CODE'];
}
}
if (!empty($showedProperties))
{
$selected = array();
foreach ($showedProperties as $code)
{
if (isset($arAllPropList[$code]))
{
$selected[$code] = $arAllPropList[$code];
}
}
$arTemplateParameters['PROPERTY_CODE_MOBILE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PROPERTY_CODE_MOBILE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'VALUES' => $selected
);
}
unset($showedProperties);
if (isset($arCurrentValues['ENLARGE_PRODUCT']) && $arCurrentValues['ENLARGE_PRODUCT'] === 'PROP')
{
$arTemplateParameters['ENLARGE_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ENLARGE_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $defaultValue + $arListPropList
);
}
if ($boolSKU)
{
$arTemplateParameters['PRODUCT_DISPLAY_MODE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_DISPLAY_MODE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'DEFAULT' => 'N',
'VALUES' => array(
'N' => GetMessage('CP_BCS_TPL_DML_SIMPLE'),
'Y' => GetMessage('CP_BCS_TPL_DML_EXT')
)
);
}
$arTemplateParameters['ADD_PICT_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_ADD_PICT_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arFilePropList
);
$arTemplateParameters['LABEL_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'Y',
'VALUES' => $arListPropList
);
if (isset($arCurrentValues['LABEL_PROP']) && !empty($arCurrentValues['LABEL_PROP']))
{
if (!is_array($arCurrentValues['LABEL_PROP']))
{
$arCurrentValues['LABEL_PROP'] = array($arCurrentValues['LABEL_PROP']);
}
$selected = array();
foreach ($arCurrentValues['LABEL_PROP'] as $name)
{
if (isset($arListPropList[$name]))
{
$selected[$name] = $arListPropList[$name];
}
}
$arTemplateParameters['LABEL_PROP_MOBILE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP_MOBILE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'VALUES' => $selected
);
unset($selected);
$arTemplateParameters['LABEL_PROP_POSITION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_LABEL_PROP_POSITION'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'position'),
'JS_EVENT' => 'initPositionControl',
'JS_DATA' => Json::encode(
array(
'positions' => array(
'top-left', 'top-center', 'top-right',
'middle-left', 'middle-center', 'middle-right',
'bottom-left', 'bottom-center', 'bottom-right'
),
'className' => ''
)
),
'DEFAULT' => 'top-left'
);
}
if ($boolSKU && isset($arCurrentValues['PRODUCT_DISPLAY_MODE']) && 'Y' == $arCurrentValues['PRODUCT_DISPLAY_MODE'])
{
$arAllOfferPropList = array();
$arFileOfferPropList = $arTreeOfferPropList = $defaultValue;
$rsProps = CIBlockProperty::GetList(
array('SORT' => 'ASC', 'ID' => 'ASC'),
array('IBLOCK_ID' => $arSKU['IBLOCK_ID'], 'ACTIVE' => 'Y')
);
while ($arProp = $rsProps->Fetch())
{
if ($arProp['ID'] == $arSKU['SKU_PROPERTY_ID'])
continue;
$arProp['USER_TYPE'] = (string)$arProp['USER_TYPE'];
$strPropName = '['.$arProp['ID'].']'.('' != $arProp['CODE'] ? '['.$arProp['CODE'].']' : '').' '.$arProp['NAME'];
if ('' == $arProp['CODE'])
$arProp['CODE'] = $arProp['ID'];
$arAllOfferPropList[$arProp['CODE']] = $strPropName;
if ('F' == $arProp['PROPERTY_TYPE'])
$arFileOfferPropList[$arProp['CODE']] = $strPropName;
if ('N' != $arProp['MULTIPLE'])
continue;
if (
'L' == $arProp['PROPERTY_TYPE']
|| 'E' == $arProp['PROPERTY_TYPE']
|| ('S' == $arProp['PROPERTY_TYPE'] && 'directory' == $arProp['USER_TYPE'] && CIBlockPriceTools::checkPropDirectory($arProp))
)
$arTreeOfferPropList[$arProp['CODE']] = $strPropName;
}
$arTemplateParameters['OFFER_ADD_PICT_PROP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_OFFER_ADD_PICT_PROP'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arFileOfferPropList
);
if (!$usePropertyFeatures)
{
$arTemplateParameters['OFFER_TREE_PROPS'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_OFFER_TREE_PROPS'),
'TYPE' => 'LIST',
'MULTIPLE' => 'Y',
'ADDITIONAL_VALUES' => 'N',
'REFRESH' => 'N',
'DEFAULT' => '-',
'VALUES' => $arTreeOfferPropList
);
}
}
}
if ($boolCatalog)
{
$arTemplateParameters['PRODUCT_SUBSCRIPTION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_SUBSCRIPTION'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'Y'
);
$arTemplateParameters['SHOW_DISCOUNT_PERCENT'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_DISCOUNT_PERCENT'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
if (isset($arCurrentValues['SHOW_DISCOUNT_PERCENT']) && $arCurrentValues['SHOW_DISCOUNT_PERCENT'] === 'Y')
{
$arTemplateParameters['DISCOUNT_PERCENT_POSITION'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_DISCOUNT_PERCENT_POSITION'),
'TYPE' => 'CUSTOM',
'JS_FILE' => CatalogSectionComponent::getSettingsScript($componentPath, 'position'),
'JS_EVENT' => 'initPositionControl',
'JS_DATA' => Json::encode(
array(
'positions' => array(
'top-left', 'top-center', 'top-right',
'middle-left', 'middle-center', 'middle-right',
'bottom-left', 'bottom-center', 'bottom-right'
),
'className' => 'bx-pos-parameter-block-circle'
)
),
'DEFAULT' => 'bottom-right'
);
}
$arTemplateParameters['SHOW_OLD_PRICE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_OLD_PRICE'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N'
);
$arTemplateParameters['SHOW_MAX_QUANTITY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY'),
'TYPE' => 'LIST',
'REFRESH' => 'Y',
'MULTIPLE' => 'N',
'VALUES' => array(
'N' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_N'),
'Y' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_Y'),
'M' => GetMessage('CP_BCS_TPL_SHOW_MAX_QUANTITY_M')
),
'DEFAULT' => array('N'),
);
if (isset($arCurrentValues['SHOW_MAX_QUANTITY']))
{
if ($arCurrentValues['SHOW_MAX_QUANTITY'] !== 'N')
{
$arTemplateParameters['MESS_SHOW_MAX_QUANTITY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY_DEFAULT')
);
}
if ($arCurrentValues['SHOW_MAX_QUANTITY'] === 'M')
{
$arTemplateParameters['RELATIVE_QUANTITY_FACTOR'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_RELATIVE_QUANTITY_FACTOR'),
'TYPE' => 'STRING',
'DEFAULT' => '5'
);
$arTemplateParameters['MESS_RELATIVE_QUANTITY_MANY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY_DEFAULT')
);
$arTemplateParameters['MESS_RELATIVE_QUANTITY_FEW'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW_DEFAULT')
);
}
}
$arTemplateParameters['ADD_TO_BASKET_ACTION'] = array(
'PARENT' => 'BASKET',
'NAME' => GetMessage('CP_BCS_TPL_ADD_TO_BASKET_ACTION'),
'TYPE' => 'LIST',
'VALUES' => array(
'ADD' => GetMessage('ADD_TO_BASKET_ACTION_ADD'),
'BUY' => GetMessage('ADD_TO_BASKET_ACTION_BUY')
),
'DEFAULT' => 'ADD',
'REFRESH' => 'N'
);
$arTemplateParameters['SHOW_CLOSE_POPUP'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_CLOSE_POPUP'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N',
);
}
$arTemplateParameters['MESS_BTN_BUY'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_BUY'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_BUY_DEFAULT')
);
$arTemplateParameters['LAZY_LOAD'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_LAZY_LOAD'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
$arTemplateParameters['MESS_BTN_LAZY_LOAD'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_LAZY_LOAD'),
'TYPE' => 'TEXT',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_LAZY_LOAD_DEFAULT'),
'HIDDEN' => (isset($arCurrentValues['LAZY_LOAD']) && $arCurrentValues['LAZY_LOAD'] === 'Y' ? 'N' : 'Y')
);
$arTemplateParameters['LOAD_ON_SCROLL'] = array(
'PARENT' => 'PAGER_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_LOAD_ON_SCROLL'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N',
'HIDDEN' => (
(isset($arCurrentValues['LAZY_LOAD']) && $arCurrentValues['LAZY_LOAD'] === 'Y')
|| (isset($arCurrentValues['DISPLAY_TOP_PAGER']) && $arCurrentValues['DISPLAY_TOP_PAGER'] === 'Y')
|| (!isset($arCurrentValues['DISPLAY_BOTTOM_PAGER']) || $arCurrentValues['DISPLAY_BOTTOM_PAGER'] !== 'N')
? 'N'
: 'Y'
)
);
$arTemplateParameters['MESS_BTN_ADD_TO_BASKET'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET_DEFAULT')
);
$arTemplateParameters['MESS_BTN_SUBSCRIBE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_SUBSCRIBE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_SUBSCRIBE_DEFAULT')
);
if (isset($arCurrentValues['DISPLAY_COMPARE']) && $arCurrentValues['DISPLAY_COMPARE'] === 'Y')
{
$arTemplateParameters['MESS_BTN_COMPARE'] = array(
'PARENT' => 'COMPARE',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_COMPARE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_COMPARE_DEFAULT')
);
$arTemplateParameters['COMPARE_NAME'] = array(
'PARENT' => 'COMPARE',
'NAME' => GetMessage('CP_BCS_TPL_COMPARE_NAME'),
'TYPE' => 'STRING',
'DEFAULT' => 'CATALOG_COMPARE_LIST'
);
}
$arTemplateParameters['MESS_BTN_DETAIL'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_BTN_DETAIL'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_BTN_DETAIL_DEFAULT')
);
$arTemplateParameters['MESS_NOT_AVAILABLE'] = array(
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_DEFAULT')
);
$arTemplateParameters['MESS_NOT_AVAILABLE_SERVICE'] = [
'PARENT' => 'VISUAL',
'NAME' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE'),
'TYPE' => 'STRING',
'DEFAULT' => GetMessage('CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE_DEFAULT'),
];
if (\Bitrix\Main\Analytics\Catalog::isOn())
{
$arTemplateParameters['RCM_TYPE'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_TYPE_TITLE'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'VALUES' => array(
// personal
'personal' => GetMessage('CP_BCS_TPL_PERSONAL'),
// general
'bestsell' => GetMessage('CP_BCS_TPL_BESTSELLERS'),
// item2item
'similar_sell' => GetMessage('CP_BCS_TPL_SOLD_WITH'),
'similar_view' => GetMessage('CP_BCS_TPL_VIEWED_WITH'),
'similar' => GetMessage('CP_BCS_TPL_SIMILAR'),
// randomly distributed
'any_similar' => GetMessage('CP_BCS_TPL_SIMILAR_ANY'),
'any_personal' => GetMessage('CP_BCS_TPL_PERSONAL_WBEST'),
'any' => GetMessage('CP_BCS_TPL_RAND')
),
'DEFAULT' => 'personal'
);
$arTemplateParameters['RCM_PROD_ID'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_PRODUCT_ID_PARAM'),
'TYPE' => 'STRING',
'DEFAULT' => '={$_REQUEST["PRODUCT_ID"]}'
);
$arTemplateParameters['SHOW_FROM_SECTION'] = array(
'PARENT' => 'BIG_DATA_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_SHOW_FROM_SECTION'),
'TYPE' => 'CHECKBOX',
'DEFAULT' => 'N'
);
}
$arTemplateParameters['USE_ENHANCED_ECOMMERCE'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_USE_ENHANCED_ECOMMERCE'),
'TYPE' => 'CHECKBOX',
'REFRESH' => 'Y',
'DEFAULT' => 'N'
);
if (isset($arCurrentValues['USE_ENHANCED_ECOMMERCE']) && $arCurrentValues['USE_ENHANCED_ECOMMERCE'] === 'Y')
{
$arTemplateParameters['DATA_LAYER_NAME'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_DATA_LAYER_NAME'),
'TYPE' => 'STRING',
'DEFAULT' => 'dataLayer'
);
$arTemplateParameters['BRAND_PROPERTY'] = array(
'PARENT' => 'ANALYTICS_SETTINGS',
'NAME' => GetMessage('CP_BCS_TPL_BRAND_PROPERTY'),
'TYPE' => 'LIST',
'MULTIPLE' => 'N',
'DEFAULT' => '',
'VALUES' => $defaultValue + $arAllPropList
);
}

@ -0,0 +1,63 @@
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var array $arParams
* @var array $templateData
* @var string $templateFolder
* @var CatalogSectionComponent $component
*/
global $APPLICATION;
if (isset($templateData['TEMPLATE_THEME']))
{
$APPLICATION->SetAdditionalCSS($templateFolder.'/themes/'.$templateData['TEMPLATE_THEME'].'/style.css');
$APPLICATION->SetAdditionalCSS('/bitrix/css/main/themes/'.$templateData['TEMPLATE_THEME'].'/style.css', true);
}
if (!empty($templateData['TEMPLATE_LIBRARY']))
{
$loadCurrency = false;
if (!empty($templateData['CURRENCIES']))
{
$loadCurrency = \Bitrix\Main\Loader::includeModule('currency');
}
CJSCore::Init($templateData['TEMPLATE_LIBRARY']);
if ($loadCurrency)
{
?>
<script>
BX.Currency.setCurrencies(<?=$templateData['CURRENCIES']?>);
</script>
<?
}
}
// lazy load and big data json answers
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
if ($request->isAjaxRequest() && ($request->get('action') === 'showMore' || $request->get('action') === 'deferredLoad'))
{
$content = ob_get_contents();
ob_end_clean();
[, $itemsContainer] = explode('<!-- items-container -->', $content);
$paginationContainer = '';
if ($templateData['USE_PAGINATION_CONTAINER'])
{
[, $paginationContainer] = explode('<!-- pagination-container -->', $content);
}
[, $epilogue] = explode('<!-- component-end -->', $content);
if (isset($arParams['AJAX_MODE']) && $arParams['AJAX_MODE'] === 'Y')
{
$component->prepareLinks($paginationContainer);
}
$component::sendJsonAnswer(array(
'items' => $itemsContainer,
'pagination' => $paginationContainer,
'epilogue' => $epilogue,
));
}

@ -0,0 +1,107 @@
<?
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
if (!function_exists('getDoublePicturesForItem'))
{
function getDoublePicturesForItem(&$item, $propertyCode)
{
$result = array(
'PICT' => false,
'SECOND_PICT' => false
);
if (!empty($item) && is_array($item))
{
if (!empty($item['PREVIEW_PICTURE']))
{
if (!is_array($item['PREVIEW_PICTURE']))
$item['PREVIEW_PICTURE'] = CFile::GetFileArray($item['PREVIEW_PICTURE']);
if (isset($item['PREVIEW_PICTURE']['ID']))
{
$result['PICT'] = array(
'ID' => intval($item['PREVIEW_PICTURE']['ID']),
'SRC' => $item['PREVIEW_PICTURE']['SRC'],
'WIDTH' => intval($item['PREVIEW_PICTURE']['WIDTH']),
'HEIGHT' => intval($item['PREVIEW_PICTURE']['HEIGHT'])
);
}
}
if (!empty($item['DETAIL_PICTURE']))
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
if (!is_array($item['DETAIL_PICTURE']))
$item['DETAIL_PICTURE'] = CFile::GetFileArray($item['DETAIL_PICTURE']);
if (isset($item['DETAIL_PICTURE']['ID']))
{
$result[$keyPict] = array(
'ID' => intval($item['DETAIL_PICTURE']['ID']),
'SRC' => $item['DETAIL_PICTURE']['SRC'],
'WIDTH' => intval($item['DETAIL_PICTURE']['WIDTH']),
'HEIGHT' => intval($item['DETAIL_PICTURE']['HEIGHT'])
);
}
}
if (empty($result['SECOND_PICT']))
{
if (
'' != $propertyCode &&
isset($item['PROPERTIES'][$propertyCode]) &&
'F' == $item['PROPERTIES'][$propertyCode]['PROPERTY_TYPE']
)
{
if (
isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) &&
!empty($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE'])
)
{
$fileValues = (
isset($item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']['ID']) ?
array(0 => $item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']) :
$item['DISPLAY_PROPERTIES'][$propertyCode]['FILE_VALUE']
);
foreach ($fileValues as &$oneFileValue)
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
$result[$keyPict] = array(
'ID' => intval($oneFileValue['ID']),
'SRC' => $oneFileValue['SRC'],
'WIDTH' => intval($oneFileValue['WIDTH']),
'HEIGHT' => intval($oneFileValue['HEIGHT'])
);
if ('SECOND_PICT' == $keyPict)
break;
}
if (isset($oneFileValue))
unset($oneFileValue);
}
else
{
$propValues = $item['PROPERTIES'][$propertyCode]['VALUE'];
if (!is_array($propValues))
$propValues = array($propValues);
foreach ($propValues as &$oneValue)
{
$oneFileValue = CFile::GetFileArray($oneValue);
if (isset($oneFileValue['ID']))
{
$keyPict = (empty($result['PICT']) ? 'PICT' : 'SECOND_PICT');
$result[$keyPict] = array(
'ID' => intval($oneFileValue['ID']),
'SRC' => $oneFileValue['SRC'],
'WIDTH' => intval($oneFileValue['WIDTH']),
'HEIGHT' => intval($oneFileValue['HEIGHT'])
);
if ('SECOND_PICT' == $keyPict)
break;
}
}
if (isset($oneValue))
unset($oneValue);
}
}
}
}
return $result;
}
}
?>

@ -0,0 +1,109 @@
<?php
$MESS["ADD_PICT_PROP_TIP"] = "Eigenschaft der zusätzlichen Bilder für Produkt";
$MESS["ADD_TO_BASKET_ACTION_ADD"] = "Zum Warenkorb hinzufügen";
$MESS["ADD_TO_BASKET_ACTION_BUY"] = "Kaufen";
$MESS["CP_BCS_TPL_ADD_PICT_PROP"] = "Zusätzliches Bild des Hauptproduktes";
$MESS["CP_BCS_TPL_ADD_TO_BASKET_ACTION"] = "Schaltfläche \"Zum Warenkorb hinzufügen\" oder \"Kaufen\" anzeigen";
$MESS["CP_BCS_TPL_BESTSELLERS"] = "Meistverkaufte Produkte";
$MESS["CP_BCS_TPL_BRAND_PROPERTY"] = "Eigenschaft der Handelsmarken";
$MESS["CP_BCS_TPL_COMPARE_NAME"] = "Einmaliger Name für Vergleichstabelle";
$MESS["CP_BCS_TPL_DATA_LAYER_NAME"] = "Name des Datencontainers";
$MESS["CP_BCS_TPL_DISCOUNT_PERCENT_POSITION"] = "Position des Rabattprozents";
$MESS["CP_BCS_TPL_DML_EXT"] = "Erweitert";
$MESS["CP_BCS_TPL_DML_SIMPLE"] = "Einfacher Modus";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT"] = "Produkte in der Liste hervorheben";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_PROP"] = "nach Eigenschaft mit Rücksicht auf Vorlageneinstellungen (Sortierung der Element kann sich dabei ändern)";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_STRICT"] = "mithilfe der gewählten Vorlage (streng)";
$MESS["CP_BCS_TPL_ENLARGE_PROP"] = "Hervorhebung mithilfe der gewählten Eigenschaft";
$MESS["CP_BCS_TPL_LABEL_PROP"] = "Eigenschaft des Produktetiketts";
$MESS["CP_BCS_TPL_LABEL_PROP_MOBILE"] = "Eigenschaften der Produktlabels für mobile Geräte";
$MESS["CP_BCS_TPL_LABEL_PROP_POSITION"] = "Position der Produktlabels";
$MESS["CP_BCS_TPL_LAZY_LOAD"] = "Schaltfläche zum Lazy Load Modus anzeigen";
$MESS["CP_BCS_TPL_LOAD_ON_SCROLL"] = "Beim Scrollen weitere Produkte anzeigen";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "Text der Schaltfläche \"Zum Warenkorb hinzufügen\"";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET_DEFAULT"] = "Zum Warenkorb hinzufügen";
$MESS["CP_BCS_TPL_MESS_BTN_BUY"] = "Text der Schaltfläche \"Kaufen\"";
$MESS["CP_BCS_TPL_MESS_BTN_BUY_DEFAULT"] = "Kaufen";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE"] = "Text der Schaltfläche \"Vergleichen\"";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE_DEFAULT"] = "Vergleichen";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL"] = "Text der Schalfläche \"Details\"";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL_DEFAULT"] = "Details";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD"] = "Text der Schaltfläche \"Mehr anzeigen\"";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD_DEFAULT"] = "Mehr anzeigen";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "Text der Schaltfläche \"Benachrichtigen wenn wieder auf Lager\"";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE_DEFAULT"] = "Benachrichtigen wenn wieder auf Lager";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE"] = "Nachricht über nicht verfügbares Produkt";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_DEFAULT"] = "Produkt nicht verfügbar";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE"] = "Nachricht über die Nichtverfügbarkeit der Dienstleistung";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE_DEFAULT"] = "Nicht verfügbar";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW"] = "Text für Werte, die kleiner sind als berechnet wurde";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW_DEFAULT"] = "nur noch wenige";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY"] = "Text für Werte, die größer sind als berechnet wurde";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY_DEFAULT"] = "am Lager";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY"] = "Guthabentext";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY_DEFAULT"] = "Am Lager";
$MESS["CP_BCS_TPL_OFFER_ADD_PICT_PROP"] = "Zusätzliches Bild der Produktvariante";
$MESS["CP_BCS_TPL_OFFER_TREE_PROPS"] = "Eigenschaften für die Gruppierung der Produktvarianten";
$MESS["CP_BCS_TPL_PERSONAL"] = "Persönliche Empfehlungen";
$MESS["CP_BCS_TPL_PERSONAL_WBEST"] = "Meistverkaufte/Persänliche";
$MESS["CP_BCS_TPL_PRODUCT_BLOCKS_ORDER"] = "Reihenfolge der Ansicht der Produktblöcke";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_BUTTONS"] = "Aktionen";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_COMPARE"] = "Vergleichen";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PRICE"] = "Preis";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PROPS"] = "Eigenschaften";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY"] = "Menge";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY_LIMIT"] = "Guthaben";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_SKU"] = "Produktvariante";
$MESS["CP_BCS_TPL_PRODUCT_DISPLAY_MODE"] = "Ansichtsmodus";
$MESS["CP_BCS_TPL_PRODUCT_ID_PARAM"] = "Parameter der Produkt-ID (für Empfehlungen)";
$MESS["CP_BCS_TPL_PRODUCT_ROW_VARIANTS"] = "Option der Produktansicht";
$MESS["CP_BCS_TPL_PRODUCT_SUBSCRIPTION"] = "Benachrichtigungen über wieder-auf-Lager aktivieren";
$MESS["CP_BCS_TPL_PROPERTY_CODE_MOBILE"] = "Produkteigenschaften für mobile Geräte";
$MESS["CP_BCS_TPL_PROP_EMPTY"] = "Nicht ausgewählt";
$MESS["CP_BCS_TPL_RAND"] = "Beliebige Empfehlung";
$MESS["CP_BCS_TPL_RELATIVE_QUANTITY_FACTOR"] = "Wert zum Ersetzen, wenn überschritten";
$MESS["CP_BCS_TPL_SETTINGS_DELETE"] = "Löschen";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY"] = "Produkte pro Seite";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY_BIG_DATA"] = "BigData Produkte pro Seite";
$MESS["CP_BCS_TPL_SETTINGS_VARIANT"] = "Option";
$MESS["CP_BCS_TPL_SHOW_CLOSE_POPUP"] = "Schaltfläche \"Weiter einkaufen\" in Popup-Fenstern anzeigen";
$MESS["CP_BCS_TPL_SHOW_DISCOUNT_PERCENT"] = "Rabattwert anzeigen";
$MESS["CP_BCS_TPL_SHOW_FROM_SECTION"] = "Produkte im Bereich anzeigen";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY"] = "Produktguthaben anzeigen";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_M"] = "Guthaben durch Text ersetzen";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_N"] = "nicht anzeigen";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_Y"] = "wirkliches Guthaben anzeigen";
$MESS["CP_BCS_TPL_SHOW_OLD_PRICE"] = "Vorherigen Preis anzeigen";
$MESS["CP_BCS_TPL_SHOW_SLIDER"] = "Laufleiste der Produkte anzeigen";
$MESS["CP_BCS_TPL_SIMILAR"] = "Ähnliche Produkte";
$MESS["CP_BCS_TPL_SIMILAR_ANY"] = "Auch gekauft/Auch angezeigt/Ähnliche Produkte";
$MESS["CP_BCS_TPL_SLIDER_INTERVAL"] = "Zeitabstand beim Bildwechsel, ms";
$MESS["CP_BCS_TPL_SLIDER_PROGRESS"] = "Fortschrittsbalken anzeigen";
$MESS["CP_BCS_TPL_SOLD_WITH"] = "Mit diesem Produkt kauft man auch";
$MESS["CP_BCS_TPL_TEMPLATE_THEME"] = "Farbschema";
$MESS["CP_BCS_TPL_THEME_BLUE"] = "Blau (standardmäßig)";
$MESS["CP_BCS_TPL_THEME_GREEN"] = "Grün";
$MESS["CP_BCS_TPL_THEME_RED"] = "rot";
$MESS["CP_BCS_TPL_THEME_SITE"] = "Farbschema der Website benutzen (für bitrix.eshop)";
$MESS["CP_BCS_TPL_THEME_YELLOW"] = "Gelb";
$MESS["CP_BCS_TPL_TYPE_TITLE"] = "Empfehlungstyp";
$MESS["CP_BCS_TPL_USE_ENHANCED_ECOMMERCE"] = "E-commerce Daten an Google senden";
$MESS["CP_BCS_TPL_VIEWED_WITH"] = "Mit diesem Produkt zeigt man auch an";
$MESS["LABEL_PROP_TIP"] = "Eigenschaft des Produktetiketts";
$MESS["MESS_BTN_ADD_TO_BASKET_TIP"] = "Text zum Anzeigen auf der Schaltfläche";
$MESS["MESS_BTN_BUY_TIP"] = "Text zum Anzeigen auf der Schaltfläche";
$MESS["MESS_BTN_COMPARE_TIP"] = "Text zum Anzeigen auf der Schaltfläche";
$MESS["MESS_BTN_DETAIL_TIP"] = "Text zum Anzeigen auf der Schaltfläche";
$MESS["MESS_BTN_SUBSCRIBE_TIP"] = "Text zum Anzeigen auf der Schaltfläche";
$MESS["MESS_NOT_AVAILABLE_TIP"] = "Nachricht über nicht verfügbares Produkt";
$MESS["OFFER_ADD_PICT_PROP_TIP"] = "Eigenschaft der zusätzlichen Bilder der Produktvarianten (wenn vorhanden)";
$MESS["OFFER_TREE_PROPS_TIP"] = "Liste der Eigenschaften, nach denen Produktvarianten gruppiert und angezeigt werden";
$MESS["PRODUCT_BLOCKS_ORDER_TIP"] = "Einige Blöcke können wegen der Vorlagenlogik die Reihenfolge nicht berücksichtigen. Ein Block kann nicht sichtbar sein, wenn er deaktiviert wurde oder nicht verfügbar ist.";
$MESS["PRODUCT_DISPLAY_MODE_TIP"] = "Modus der Produktansicht (mit oder ohne Produktvariante, etc.)";
$MESS["PRODUCT_SUBSCRIPTION_TIP"] = "Benachrichtigungen für Kunden darüber aktivieren, dass die Produkte, für die sich Kunden interessieren, wieder verfügbar sind";
$MESS["RELATIVE_QUANTITY_FACTOR_TIP"] = "Dieser Wert wird mit dem Ergebnis von \"Menge am Lager\" / \"Maßeinheitsverhältnis\" verglichen";
$MESS["SHOW_CLOSE_POPUP_TIP"] = "Wenn diese Option aktiviert ist, werden die Popup-Fenster die Schaltfläche \"Weiter einkaufen\" anzeigen";
$MESS["SHOW_DISCOUNT_PERCENT_TIP"] = "Wenn der Rabatt aktiv ist, zeigt den Rabatt in Prozentangabe an";
$MESS["SHOW_OLD_PRICE_TIP"] = "Wenn der Rabatt aktiv ist, zeigt den vorherigen Preis an";
$MESS["TEMPLATE_THEME_TIP"] = "Bestimmt die Farben der Website-Ansicht. Standardmäßig wird Blau verwendet.";
$MESS["USE_ENHANCED_ECOMMERCE_TIP"] = "Die Optionen von Google Analytics Enhanced Ecommerce müssen dafür konfiguriert werden";

@ -0,0 +1,27 @@
<?php
$MESS["ADD_TO_BASKET_OK"] = "Produkt wurde zum Warenkorb hinzugefügt";
$MESS["CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE"] = "Nicht verfügbar";
$MESS["CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR"] = "Unbekannter Fehler beim Hinzufügen eines Elementes zum Warenkorb";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT"] = "Zum Warenkorb";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE"] = "Schließen";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP"] = "Weiter einkaufen";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT"] = "Produkte vergleichen";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER"] = "Wird geladen";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS"] = "Auswählen";
$MESS["CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD"] = "Mehr anzeigen";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_OK"] = "Produkt wurde zur Vergleichsliste hinzugefügt";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_TITLE"] = "Produktvergleich";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR"] = "Fehler beim Hinzufügen des Produktes zur Vergleichsliste";
$MESS["CT_BCS_CATALOG_PRICE_TOTAL_PREFIX"] = "Gesamt";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW"] = "nur noch wenige";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY"] = "Am Lager verfügbar";
$MESS["CT_BCS_CATALOG_SHOW_MAX_QUANTITY"] = "Am Lager";
$MESS["CT_BCS_CATALOG_TITLE_BASKET_PROPS"] = "Elementeigenschaften, die zum Warenkorb hinzugefügt werden sollen";
$MESS["CT_BCS_CATALOG_TITLE_ERROR"] = "Fehler";
$MESS["CT_BCS_TPL_ELEMENT_DELETE_CONFIRM"] = "Alle mit diesem Eintrag verbundenen Informationen gehen verloren. Wollen Sie Fortfahren?";
$MESS["CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "In Warenkorb";
$MESS["CT_BCS_TPL_MESS_BTN_BUY"] = "Kaufen";
$MESS["CT_BCS_TPL_MESS_BTN_COMPARE"] = "Vergleichen";
$MESS["CT_BCS_TPL_MESS_BTN_DETAIL"] = "Mehr";
$MESS["CT_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "Benachrichtigen wenn wieder auf Lager";
$MESS["CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE"] = "nicht auf Lager";

@ -0,0 +1,109 @@
<?php
$MESS["ADD_PICT_PROP_TIP"] = "Additional images property for product";
$MESS["ADD_TO_BASKET_ACTION_ADD"] = "Add to Cart";
$MESS["ADD_TO_BASKET_ACTION_BUY"] = "Buy Now";
$MESS["CP_BCS_TPL_ADD_PICT_PROP"] = "Additional image of main item";
$MESS["CP_BCS_TPL_ADD_TO_BASKET_ACTION"] = "Show \"Add to Cart\" or \"Buy Now\" button";
$MESS["CP_BCS_TPL_BESTSELLERS"] = "Top Selling";
$MESS["CP_BCS_TPL_BRAND_PROPERTY"] = "Brand property";
$MESS["CP_BCS_TPL_COMPARE_NAME"] = "Unique name for comparison chart";
$MESS["CP_BCS_TPL_DATA_LAYER_NAME"] = "Data container name";
$MESS["CP_BCS_TPL_DISCOUNT_PERCENT_POSITION"] = "Discount percent position";
$MESS["CP_BCS_TPL_DML_EXT"] = "extended";
$MESS["CP_BCS_TPL_DML_SIMPLE"] = "simple mode";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT"] = "Highlight products in list";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_PROP"] = "by property with respect to template preferences (item sort mode may change)";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_STRICT"] = "using selected template (strict)";
$MESS["CP_BCS_TPL_ENLARGE_PROP"] = "Highlight using selected property";
$MESS["CP_BCS_TPL_LABEL_PROP"] = "Product tag property";
$MESS["CP_BCS_TPL_LABEL_PROP_MOBILE"] = "Product label properties for mobile devices";
$MESS["CP_BCS_TPL_LABEL_PROP_POSITION"] = "Product label position";
$MESS["CP_BCS_TPL_LAZY_LOAD"] = "Show Lazy Load button";
$MESS["CP_BCS_TPL_LOAD_ON_SCROLL"] = "Load more products on scroll";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "\"Add to cart\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET_DEFAULT"] = "Add to cart";
$MESS["CP_BCS_TPL_MESS_BTN_BUY"] = "\"Buy\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_BUY_DEFAULT"] = "Buy";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE"] = "\"Compare\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE_DEFAULT"] = "Compare";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL"] = "\"Details\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL_DEFAULT"] = "Details";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD"] = "\"Show More\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD_DEFAULT"] = "Show More";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "\"Notify when back in stock\" button text";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE_DEFAULT"] = "Notify when back in stock";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE"] = "Item not available message";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_DEFAULT"] = "Item not available";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE"] = "Service unavailable message";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE_DEFAULT"] = "Unavailable";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW"] = "Text for values less than calculated";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW_DEFAULT"] = "only a few left";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY"] = "Text for values greater than calculated";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY_DEFAULT"] = "in stock";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY"] = "Balance text";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY_DEFAULT"] = "Stock";
$MESS["CP_BCS_TPL_OFFER_ADD_PICT_PROP"] = "Additional image property of SKU";
$MESS["CP_BCS_TPL_OFFER_TREE_PROPS"] = "Properties for grouping of SKUs";
$MESS["CP_BCS_TPL_PERSONAL"] = "Personal recommendations";
$MESS["CP_BCS_TPL_PERSONAL_WBEST"] = "Top selling/Personal";
$MESS["CP_BCS_TPL_PRODUCT_BLOCKS_ORDER"] = "Product block display order";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_BUTTONS"] = "Actions";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_COMPARE"] = "Compare";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PRICE"] = "Price";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PROPS"] = "Properties";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY"] = "Quantity";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY_LIMIT"] = "Balance";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_SKU"] = "SKU";
$MESS["CP_BCS_TPL_PRODUCT_DISPLAY_MODE"] = "View mode";
$MESS["CP_BCS_TPL_PRODUCT_ID_PARAM"] = "Product ID parameter (for recommendations)";
$MESS["CP_BCS_TPL_PRODUCT_ROW_VARIANTS"] = "Product display option";
$MESS["CP_BCS_TPL_PRODUCT_SUBSCRIPTION"] = "Enable back-in-stock notifications";
$MESS["CP_BCS_TPL_PROPERTY_CODE_MOBILE"] = "Product properties for mobile devices";
$MESS["CP_BCS_TPL_PROP_EMPTY"] = "not selected";
$MESS["CP_BCS_TPL_RAND"] = "Any recommendation";
$MESS["CP_BCS_TPL_RELATIVE_QUANTITY_FACTOR"] = "Replace stock value if it exceeds";
$MESS["CP_BCS_TPL_SETTINGS_DELETE"] = "Delete";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY"] = "Products per page";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY_BIG_DATA"] = "BigData products per page";
$MESS["CP_BCS_TPL_SETTINGS_VARIANT"] = "Option";
$MESS["CP_BCS_TPL_SHOW_CLOSE_POPUP"] = "Show \"Continue Shopping\" button in popup windows";
$MESS["CP_BCS_TPL_SHOW_DISCOUNT_PERCENT"] = "Show discount value";
$MESS["CP_BCS_TPL_SHOW_FROM_SECTION"] = "Show products in section";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY"] = "Show product balance";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_M"] = "replace balance with text";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_N"] = "don't show";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_Y"] = "show real balance";
$MESS["CP_BCS_TPL_SHOW_OLD_PRICE"] = "Show previous price";
$MESS["CP_BCS_TPL_SHOW_SLIDER"] = "Show product slider";
$MESS["CP_BCS_TPL_SIMILAR"] = "Similar products";
$MESS["CP_BCS_TPL_SIMILAR_ANY"] = "Also purchased/Also viewed/Similar products";
$MESS["CP_BCS_TPL_SLIDER_INTERVAL"] = "Slider update timeout, ms";
$MESS["CP_BCS_TPL_SLIDER_PROGRESS"] = "Show progress bar";
$MESS["CP_BCS_TPL_SOLD_WITH"] = "Also bought";
$MESS["CP_BCS_TPL_TEMPLATE_THEME"] = "Color theme";
$MESS["CP_BCS_TPL_THEME_BLUE"] = "blue (default theme)";
$MESS["CP_BCS_TPL_THEME_GREEN"] = "green";
$MESS["CP_BCS_TPL_THEME_RED"] = "red";
$MESS["CP_BCS_TPL_THEME_SITE"] = "Use site theme (for bitrix.eshop)";
$MESS["CP_BCS_TPL_THEME_YELLOW"] = "yellow";
$MESS["CP_BCS_TPL_TYPE_TITLE"] = "Recommendation type";
$MESS["CP_BCS_TPL_USE_ENHANCED_ECOMMERCE"] = "Submit e-commerce data to Google";
$MESS["CP_BCS_TPL_VIEWED_WITH"] = "Also viewed";
$MESS["LABEL_PROP_TIP"] = "Product tag property";
$MESS["MESS_BTN_ADD_TO_BASKET_TIP"] = "Text to display on button";
$MESS["MESS_BTN_BUY_TIP"] = "Text to display on button";
$MESS["MESS_BTN_COMPARE_TIP"] = "Text to display on button";
$MESS["MESS_BTN_DETAIL_TIP"] = "Text to display on button";
$MESS["MESS_BTN_SUBSCRIBE_TIP"] = "Text to display on button";
$MESS["MESS_NOT_AVAILABLE_TIP"] = "Item not available message";
$MESS["OFFER_ADD_PICT_PROP_TIP"] = "Property containing extra images for SKU (if exists)";
$MESS["OFFER_TREE_PROPS_TIP"] = "List of properties by which SKUs will be grouped and displayed";
$MESS["PRODUCT_BLOCKS_ORDER_TIP"] = "Some blocks may not respect the order due to template logic. A block may be invisible if it is disabled or unavailable.";
$MESS["PRODUCT_DISPLAY_MODE_TIP"] = "Item display mode (with or without SKU, etc.)";
$MESS["PRODUCT_SUBSCRIPTION_TIP"] = "Enables the system to notify a customer of the new arrival of a previously out-of-stock item he or she took a particular interest in";
$MESS["RELATIVE_QUANTITY_FACTOR_TIP"] = "This value is compared to the result of \"Quantity in stock\" / \"Unit ratio\"";
$MESS["SHOW_CLOSE_POPUP_TIP"] = "If checked, popup windows will show the \"Continue Shopping\" button";
$MESS["SHOW_DISCOUNT_PERCENT_TIP"] = "If the discount is active, shows the discount percent value";
$MESS["SHOW_OLD_PRICE_TIP"] = "If the discount is active, shows the previous price";
$MESS["TEMPLATE_THEME_TIP"] = "Defines colors for rendering the website text and graphics. Blue theme is the default option.";
$MESS["USE_ENHANCED_ECOMMERCE_TIP"] = "This requires Google Analytics Enhanced Ecommerce options to be configured";

@ -0,0 +1,27 @@
<?php
$MESS["ADD_TO_BASKET_OK"] = "Item added to cart";
$MESS["CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE"] = "Unavailable";
$MESS["CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR"] = "Unknown error adding an item to shopping cart";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT"] = "Go to shopping cart";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE"] = "Close";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP"] = "Continue shopping";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT"] = "Compare products";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER"] = "Loading";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS"] = "Select";
$MESS["CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD"] = "Show more";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_OK"] = "Product has been added to comparison chart";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_TITLE"] = "Product comparison";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR"] = "Error adding the product to comparison chart";
$MESS["CT_BCS_CATALOG_PRICE_TOTAL_PREFIX"] = "total";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW"] = "only a few left";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY"] = "in stock";
$MESS["CT_BCS_CATALOG_SHOW_MAX_QUANTITY"] = "Stock";
$MESS["CT_BCS_CATALOG_TITLE_BASKET_PROPS"] = "Item properties to pass to shopping cart";
$MESS["CT_BCS_CATALOG_TITLE_ERROR"] = "Error";
$MESS["CT_BCS_TPL_ELEMENT_DELETE_CONFIRM"] = "All the information linked to this record will be deleted. Continue anyway?";
$MESS["CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "Add to cart";
$MESS["CT_BCS_TPL_MESS_BTN_BUY"] = "Buy";
$MESS["CT_BCS_TPL_MESS_BTN_COMPARE"] = "Compare";
$MESS["CT_BCS_TPL_MESS_BTN_DETAIL"] = "More";
$MESS["CT_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "Notify when back in stock";
$MESS["CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE"] = "not available from stock";

@ -0,0 +1,110 @@
<?php
$MESS["CP_BCS_TPL_THEME_SITE"] = "Брать тему из настроек сайта (для решения bitrix.eshop)";
$MESS["CP_BCS_TPL_THEME_BLUE"] = "синяя (тема по умолчанию)";
$MESS["CP_BCS_TPL_THEME_GREEN"] = "зеленая";
$MESS["CP_BCS_TPL_THEME_RED"] = "красная";
$MESS["CP_BCS_TPL_THEME_YELLOW"] = "желтая";
$MESS["CP_BCS_TPL_DML_SIMPLE"] = "простой режим";
$MESS["CP_BCS_TPL_DML_EXT"] = "расширенный";
$MESS["CP_BCS_TPL_PROP_EMPTY"] = "не выбрано";
$MESS["CP_BCS_TPL_TEMPLATE_THEME"] = "Цветовая тема";
$MESS["CP_BCS_TPL_PRODUCT_BLOCKS_ORDER"] = "Порядок отображения блоков товара";
$MESS["PRODUCT_BLOCKS_ORDER_TIP"] = "Для некоторых блоков порядок может не соблюдаться в связи с особенностями шаблона. Также, блок товара может не отображаться, так как его функционал выключен или недоступен.";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PRICE"] = "Цена";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY_LIMIT"] = "Остаток";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_QUANTITY"] = "Количество";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_BUTTONS"] = "Действия";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_PROPS"] = "Свойства";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_SKU"] = "Торговое предложение";
$MESS["CP_BCS_TPL_PRODUCT_BLOCK_COMPARE"] = "Сравнение";
$MESS["CP_BCS_TPL_PRODUCT_DISPLAY_MODE"] = "Схема отображения";
$MESS["CP_BCS_TPL_SHOW_SLIDER"] = "Показывать слайдер для товаров";
$MESS["CP_BCS_TPL_SLIDER_INTERVAL"] = "Интервал смены слайдов, мс";
$MESS["CP_BCS_TPL_SLIDER_PROGRESS"] = "Показывать полосу прогресса";
$MESS["CP_BCS_TPL_PRODUCT_ROW_VARIANTS"] = "Вариант отображения товаров";
$MESS["CP_BCS_TPL_SETTINGS_VARIANT"] = "Вариант";
$MESS["CP_BCS_TPL_SETTINGS_DELETE"] = "Удалить";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY"] = "Количество товаров на странице";
$MESS["CP_BCS_TPL_SETTINGS_QUANTITY_BIG_DATA"] = "Количество товаров BigData на странице";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT"] = "Выделять товары в списке";
$MESS["CP_BCS_TPL_ENLARGE_PROP"] = "Выделять по выбранному свойству";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_STRICT"] = "по выбранному шаблону (строго)";
$MESS["CP_BCS_TPL_ENLARGE_PRODUCT_PROP"] = "по свойству, подгонять по шаблону (возможно изменение сортировки элементов)";
$MESS["CP_BCS_TPL_ADD_PICT_PROP"] = "Дополнительная картинка основного товара";
$MESS["CP_BCS_TPL_LABEL_PROP"] = "Свойства меток товара";
$MESS["CP_BCS_TPL_LABEL_PROP_MOBILE"] = "Свойства меток товара, отображаемые на мобильных устройствах";
$MESS["CP_BCS_TPL_LABEL_PROP_POSITION"] = "Расположение меток товара";
$MESS["CP_BCS_TPL_OFFER_ADD_PICT_PROP"] = "Дополнительные картинки предложения";
$MESS["CP_BCS_TPL_OFFER_TREE_PROPS"] = "Свойства для отбора предложений";
$MESS["CP_BCS_TPL_PRODUCT_SUBSCRIPTION"] = "Разрешить оповещения для отсутствующих товаров";
$MESS["CP_BCS_TPL_SHOW_DISCOUNT_PERCENT"] = "Показывать процент скидки";
$MESS["CP_BCS_TPL_DISCOUNT_PERCENT_POSITION"] = "Расположение процента скидки";
$MESS["CP_BCS_TPL_SHOW_OLD_PRICE"] = "Показывать старую цену";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY"] = "Показывать остаток товара";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_Y"] = "с отображением реального остатка";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_M"] = "с подменой остатка текстом";
$MESS["CP_BCS_TPL_SHOW_MAX_QUANTITY_N"] = "не показывать";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY"] = "Текст для остатка";
$MESS["CP_BCS_TPL_MESS_SHOW_MAX_QUANTITY_DEFAULT"] = "Наличие";
$MESS["CP_BCS_TPL_RELATIVE_QUANTITY_FACTOR"] = "Значение, от которого происходит подмена";
$MESS["RELATIVE_QUANTITY_FACTOR_TIP"] = "Сравнение происходит со значением, рассчитанным по формуле \"Доступное количество\"/\"Коэффициент единицы измерения\"";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY"] = "Текст для значения больше";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_MANY_DEFAULT"] = "много";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW"] = "Текст для значения меньше";
$MESS["CP_BCS_TPL_MESS_RELATIVE_QUANTITY_FEW_DEFAULT"] = "мало";
$MESS["CP_BCS_TPL_ADD_TO_BASKET_ACTION"] = "Показывать кнопку добавления в корзину или покупки";
$MESS["CP_BCS_TPL_SHOW_CLOSE_POPUP"] = "Показывать кнопку продолжения покупок во всплывающих окнах";
$MESS["CP_BCS_TPL_MESS_BTN_BUY"] = "Текст кнопки \"Купить\"";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "Текст кнопки \"Добавить в корзину\"";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL"] = "Текст кнопки \"Подробнее\"";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "Текст кнопки \"Уведомить о поступлении\"";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE"] = "Текст кнопки \"Сравнить\"";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE"] = "Сообщение об отсутствии товара";
$MESS['CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE'] = "Сообщение о недоступности услуги";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD"] = "Текст кнопки \"Показать ещё\"";
$MESS["CP_BCS_TPL_MESS_BTN_BUY_DEFAULT"] = "Купить";
$MESS["CP_BCS_TPL_MESS_BTN_ADD_TO_BASKET_DEFAULT"] = "В корзину";
$MESS["CP_BCS_TPL_MESS_BTN_DETAIL_DEFAULT"] = "Подробнее";
$MESS["CP_BCS_TPL_MESS_BTN_SUBSCRIBE_DEFAULT"] = "Подписаться";
$MESS["CP_BCS_TPL_MESS_BTN_COMPARE_DEFAULT"] = "Сравнить";
$MESS["CP_BCS_TPL_MESS_NOT_AVAILABLE_DEFAULT"] = "Нет в наличии";
$MESS['CP_BCS_TPL_MESS_NOT_AVAILABLE_SERVICE_DEFAULT'] = "Недоступно";
$MESS["CP_BCS_TPL_MESS_BTN_LAZY_LOAD_DEFAULT"] = "Показать ещё";
$MESS["CP_BCS_TPL_LAZY_LOAD"] = "Показать кнопку ленивой загрузки Lazy Load";
$MESS["CP_BCS_TPL_LOAD_ON_SCROLL"] = "Подгружать товары при прокрутке до конца";
$MESS["ADD_TO_BASKET_ACTION_BUY"] = "покупки";
$MESS["ADD_TO_BASKET_ACTION_ADD"] = "добавления в корзину";
$MESS["TEMPLATE_THEME_TIP"] = "Цветовая тема для отображения. По умолчанию берется синяя тема.";
$MESS["PRODUCT_DISPLAY_MODE_TIP"] = "Схема отображения товаров (с SKU или без и т.д.)";
$MESS["ADD_PICT_PROP_TIP"] = "Свойство дополнительных картинок товара";
$MESS["LABEL_PROP_TIP"] = "Свойство меток товара";
$MESS["OFFER_ADD_PICT_PROP_TIP"] = "Свойство дополнительных картинок предложений (если есть)";
$MESS["OFFER_TREE_PROPS_TIP"] = "Свойства, по значениям которых будут группироваться торговые предложения";
$MESS["PRODUCT_SUBSCRIPTION_TIP"] = "Разрешить оповещать клиента, что интересующий его товар стал доступен к покупке";
$MESS["SHOW_DISCOUNT_PERCENT_TIP"] = "Вывод процентного значения скидки, если скидка есть";
$MESS["SHOW_OLD_PRICE_TIP"] = "Показывать старую цену, если есть скидка";
$MESS["SHOW_CLOSE_POPUP_TIP"] = "Если опция отмечена, во всплывающих окнах будет показана кнопка \"Продолжить покупки\"";
$MESS["MESS_BTN_BUY_TIP"] = "Какой текст выводить на кнопке";
$MESS["MESS_BTN_ADD_TO_BASKET_TIP"] = "Какой текст выводить на кнопке";
$MESS["MESS_BTN_DETAIL_TIP"] = "Какой текст выводить на кнопке";
$MESS["MESS_BTN_SUBSCRIBE_TIP"] = "Какой текст выводить на кнопке";
$MESS["MESS_NOT_AVAILABLE_TIP"] = "Сообщение об отсутствии товара и невозможности его купить";
$MESS["MESS_BTN_COMPARE_TIP"] = "Какой текст выводить на кнопке";
$MESS["CP_BCS_TPL_BESTSELLERS"] = "Самые продаваемые";
$MESS["CP_BCS_TPL_PERSONAL"] = "Персональные рекомендации";
$MESS["CP_BCS_TPL_SOLD_WITH"] = "Продаваемые с этим товаром";
$MESS["CP_BCS_TPL_VIEWED_WITH"] = "Просматриваемые с этим товаром";
$MESS["CP_BCS_TPL_SIMILAR"] = "Похожие товары";
$MESS["CP_BCS_TPL_SIMILAR_ANY"] = "Продаваемые/Просматриваемые/Похожие товары";
$MESS["CP_BCS_TPL_PERSONAL_WBEST"] = "Самые продаваемые/Персональные";
$MESS["CP_BCS_TPL_RAND"] = "Любая рекомендация";
$MESS["CP_BCS_TPL_TYPE_TITLE"] = "Тип рекомендации";
$MESS["CP_BCS_TPL_PRODUCT_ID_PARAM"] = "Параметр ID продукта (для товарных рекомендаций)";
$MESS["CP_BCS_TPL_SHOW_FROM_SECTION"] = "Показывать товары из раздела";
$MESS["CP_BCS_TPL_PROPERTY_CODE_MOBILE"] = "Свойства товаров, отображаемые на мобильных устройствах";
$MESS["CP_BCS_TPL_COMPARE_NAME"] = "Уникальное имя для списка сравнения";
$MESS["CP_BCS_TPL_USE_ENHANCED_ECOMMERCE"] = "Отправлять данные электронной торговли в Google и Яндекс";
$MESS["USE_ENHANCED_ECOMMERCE_TIP"] = "Требуется дополнительная настройка в Google Analytics Enhanced
Ecommerce и/или Яндекс.Метрике";
$MESS["CP_BCS_TPL_DATA_LAYER_NAME"] = "Имя контейнера данных";
$MESS["CP_BCS_TPL_BRAND_PROPERTY"] = "Свойство брендов";

@ -0,0 +1,28 @@
<?php
$MESS["CT_BCS_TPL_ELEMENT_DELETE_CONFIRM"] = "Будет удалена вся информация, связанная с этой записью. Продолжить?";
$MESS["CT_BCS_TPL_MESS_BTN_BUY"] = "Купить";
$MESS["CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET"] = "В корзину";
$MESS["CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE"] = "Нет в наличии";
$MESS['CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE'] = "Недоступно";
$MESS["CT_BCS_TPL_MESS_BTN_DETAIL"] = "Подробнее";
$MESS["CT_BCS_TPL_MESS_BTN_SUBSCRIBE"] = "Подписаться";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT"] = "Перейти в корзину";
$MESS["ADD_TO_BASKET_OK"] = "Товар добавлен в корзину";
$MESS["CT_BCS_TPL_MESS_BTN_COMPARE"] = "Сравнить";
$MESS["CT_BCS_CATALOG_TITLE_ERROR"] = "Ошибка";
$MESS["CT_BCS_CATALOG_TITLE_BASKET_PROPS"] = "Свойства товара, добавляемые в корзину";
$MESS["CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR"] = "Неизвестная ошибка при добавлении товара в корзину";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS"] = "Выбрать";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE"] = "Закрыть";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP"] = "Продолжить покупки";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT"] = "Перейти в корзину";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_OK"] = "Товар добавлен в список сравнения";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_TITLE"] = "Сравнение товаров";
$MESS["CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR"] = "При добавлении товара в список сравнения произошла ошибка";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT"] = "Перейти в список сравнения";
$MESS["CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER"] = "Загрузка";
$MESS["CT_BCS_CATALOG_PRICE_TOTAL_PREFIX"] = "на сумму";
$MESS["CT_BCS_CATALOG_SHOW_MAX_QUANTITY"] = "Наличие";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY"] = "много";
$MESS["CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW"] = "мало";
$MESS["CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD"] = "Показать ещё";

@ -0,0 +1,90 @@
@media (min-width: 1200px){
/*lg*/
/*6*/
.product-item-list-col-6 > .col-xs-12 > .row > .col-md-2:nth-child(6n+1),
.product-item-list-col-1-6 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-6-1 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-1-6 > .col-sm-6 > .row > .col-md-4:nth-child(3n+1),
.product-item-list-col-6-1 > .col-sm-6 > .row > .col-md-4:nth-child(3n+1),
/*4*/
.product-item-list-col-4 > .col-xs-12 > .row > .col-md-3:nth-child(4n+1),
.product-item-list-col-1-4 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-4-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*3*/
.product-item-list-col-3 > .col-xs-12 > .row > .col-sm-4:nth-child(3n+1),
/*2*/
.product-item-list-col-2 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
/*1*/
.product-item-list-col-1 > .col-xs-12 > .row > .col-xs-12:nth-child(1n){clear: both}
}
@media (min-width: 992px) and (max-width:1199px){
/*md*/
/*6*/
.product-item-list-col-6 > .col-xs-12 > .row > .col-md-2:nth-child(6n+1),
.product-item-list-col-1-6 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-6-1 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-1-6 > .col-sm-6 > .row > .col-md-4:nth-child(3n+1),
.product-item-list-col-6-1 > .col-sm-6 > .row > .col-md-4:nth-child(3n+1),
/*4*/
.product-item-list-col-4 > .col-xs-12 > .row > .col-md-3:nth-child(4n+1),
.product-item-list-col-1-4 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-4-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*3*/
.product-item-list-col-3 > .col-xs-12 > .row > .col-sm-4:nth-child(3n+1),
/*2*/
.product-item-list-col-2 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
/*1*/
.product-item-list-col-1 > .col-xs-12 > .row > .col-xs-12:nth-child(1n){clear: both}
}
@media (min-width: 768px) and (max-width: 991px){
/*sm*/
/*6*/
.product-item-list-col-6 > .col-xs-12 > .row > .col-sm-4:nth-child(3n+1),
.product-item-list-col-1-6 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-6-1 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-1-6 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-6-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*4*/
.product-item-list-col-4 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-1-4 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-4-1 > .col-sm-6:nth-child(2n+1),
.product-item-list-col-1-4 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-4-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*3*/
.product-item-list-col-3 > .col-xs-12 > .row > .col-sm-4:nth-child(3n+1),
/*2*/
.product-item-list-col-2 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
/*1*/
.product-item-list-col-1 > .col-xs-12 > .row > .col-xs-12:nth-child(1n){clear: both}
}
@media (max-width: 767px){
/*xs*/
/*6*/
.product-item-list-col-6 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-1-6 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-6-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*4*/
.product-item-list-col-4 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-1-4 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
.product-item-list-col-4-1 > .col-sm-6 > .row > .col-xs-6:nth-child(2n+1),
/*3*/
.product-item-list-col-3 > .col-xs-12 > .row > .col-sm-4:nth-child(3n+1),
/*2*/
.product-item-list-col-2 > .col-xs-12 > .row > .col-xs-6:nth-child(2n+1),
/*1*/
.product-item-list-col-1 > .col-xs-12 > .row > .col-xs-12:nth-child(1n){clear: both}
}
.catalog-section-header{
font-size:14px;
font-weight: bold;
text-align: left;
margin:5px 0;
padding:5px 15px;
border-bottom: 2px solid #d9dee6;
color: #000;
}
.row::before {
display: initial;
}

@ -0,0 +1 @@
@media(min-width:1200px){.product-item-list-col-6>.col-xs-12>.row>.col-md-2:nth-child(6n+1),.product-item-list-col-1-6>.col-sm-6:nth-child(2n+1),.product-item-list-col-6-1>.col-sm-6:nth-child(2n+1),.product-item-list-col-1-6>.col-sm-6>.row>.col-md-4:nth-child(3n+1),.product-item-list-col-6-1>.col-sm-6>.row>.col-md-4:nth-child(3n+1),.product-item-list-col-4>.col-xs-12>.row>.col-md-3:nth-child(4n+1),.product-item-list-col-1-4>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-3>.col-xs-12>.row>.col-sm-4:nth-child(3n+1),.product-item-list-col-2>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1>.col-xs-12>.row>.col-xs-12:nth-child(1n){clear:both}}@media(min-width:992px) and (max-width:1199px){.product-item-list-col-6>.col-xs-12>.row>.col-md-2:nth-child(6n+1),.product-item-list-col-1-6>.col-sm-6:nth-child(2n+1),.product-item-list-col-6-1>.col-sm-6:nth-child(2n+1),.product-item-list-col-1-6>.col-sm-6>.row>.col-md-4:nth-child(3n+1),.product-item-list-col-6-1>.col-sm-6>.row>.col-md-4:nth-child(3n+1),.product-item-list-col-4>.col-xs-12>.row>.col-md-3:nth-child(4n+1),.product-item-list-col-1-4>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-3>.col-xs-12>.row>.col-sm-4:nth-child(3n+1),.product-item-list-col-2>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1>.col-xs-12>.row>.col-xs-12:nth-child(1n){clear:both}}@media(min-width:768px) and (max-width:991px){.product-item-list-col-6>.col-xs-12>.row>.col-sm-4:nth-child(3n+1),.product-item-list-col-1-6>.col-sm-6:nth-child(2n+1),.product-item-list-col-6-1>.col-sm-6:nth-child(2n+1),.product-item-list-col-1-6>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-6-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1-4>.col-sm-6:nth-child(2n+1),.product-item-list-col-4-1>.col-sm-6:nth-child(2n+1),.product-item-list-col-1-4>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-3>.col-xs-12>.row>.col-sm-4:nth-child(3n+1),.product-item-list-col-2>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1>.col-xs-12>.row>.col-xs-12:nth-child(1n){clear:both}}@media(max-width:767px){.product-item-list-col-6>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1-6>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-6-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1-4>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-4-1>.col-sm-6>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-3>.col-xs-12>.row>.col-sm-4:nth-child(3n+1),.product-item-list-col-2>.col-xs-12>.row>.col-xs-6:nth-child(2n+1),.product-item-list-col-1>.col-xs-12>.row>.col-xs-12:nth-child(1n){clear:both}}.catalog-section-header{font-size:14px;font-weight:bold;text-align:left;margin:5px 0;padding:5px 15px;border-bottom:2px solid #d9dee6;color:#000}.row::before{display:initial}

@ -0,0 +1,9 @@
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/**
* @var CBitrixComponentTemplate $this
* @var CatalogSectionComponent $component
*/
$component = $this->getComponent();
$arParams = $component->applyTemplateModifications();

@ -0,0 +1,359 @@
(function() {
'use strict';
if (!!window.JCCatalogSectionComponent)
return;
window.JCCatalogSectionComponent = function(params) {
this.formPosting = false;
this.siteId = params.siteId || '';
this.ajaxId = params.ajaxId || '';
this.template = params.template || '';
this.componentPath = params.componentPath || '';
this.parameters = params.parameters || '';
if (params.navParams)
{
this.navParams = {
NavNum: params.navParams.NavNum || 1,
NavPageNomer: parseInt(params.navParams.NavPageNomer) || 1,
NavPageCount: parseInt(params.navParams.NavPageCount) || 1
};
}
this.bigData = params.bigData || {enabled: false};
this.container = document.querySelector('[data-entity="' + params.container + '"]');
this.showMoreButton = null;
this.showMoreButtonMessage = null;
if (this.bigData.enabled && BX.util.object_keys(this.bigData.rows).length > 0)
{
BX.cookie_prefix = this.bigData.js.cookiePrefix || '';
BX.cookie_domain = this.bigData.js.cookieDomain || '';
BX.current_server_time = this.bigData.js.serverTime;
BX.ready(BX.delegate(this.bigDataLoad, this));
}
if (params.initiallyShowHeader)
{
BX.ready(BX.delegate(this.showHeader, this));
}
if (params.deferredLoad)
{
BX.ready(BX.delegate(this.deferredLoad, this));
}
if (params.lazyLoad)
{
this.showMoreButton = document.querySelector('[data-use="show-more-' + this.navParams.NavNum + '"]');
this.showMoreButtonMessage = this.showMoreButton.innerHTML;
BX.bind(this.showMoreButton, 'click', BX.proxy(this.showMore, this));
}
if (params.loadOnScroll)
{
BX.bind(window, 'scroll', BX.proxy(this.loadOnScroll, this));
}
};
window.JCCatalogSectionComponent.prototype =
{
checkButton: function()
{
if (this.showMoreButton)
{
if (this.navParams.NavPageNomer == this.navParams.NavPageCount)
{
BX.remove(this.showMoreButton);
}
else
{
this.container.appendChild(this.showMoreButton);
}
}
},
enableButton: function()
{
if (this.showMoreButton)
{
BX.removeClass(this.showMoreButton, 'disabled');
this.showMoreButton.innerHTML = this.showMoreButtonMessage;
}
},
disableButton: function()
{
if (this.showMoreButton)
{
BX.addClass(this.showMoreButton, 'disabled');
this.showMoreButton.innerHTML = BX.message('BTN_MESSAGE_LAZY_LOAD_WAITER');
}
},
loadOnScroll: function()
{
var scrollTop = BX.GetWindowScrollPos().scrollTop,
containerBottom = BX.pos(this.container).bottom;
if (scrollTop + window.innerHeight > containerBottom)
{
this.showMore();
}
},
showMore: function()
{
if (this.navParams.NavPageNomer < this.navParams.NavPageCount)
{
var data = {};
data['action'] = 'showMore';
data['PAGEN_' + this.navParams.NavNum] = this.navParams.NavPageNomer + 1;
if (!this.formPosting)
{
this.formPosting = true;
this.disableButton();
this.sendRequest(data);
}
}
},
bigDataLoad: function()
{
var url = 'https://analytics.bitrix.info/crecoms/v1_0/recoms.php',
data = BX.ajax.prepareData(this.bigData.params);
if (data)
{
url += (url.indexOf('?') !== -1 ? '&' : '?') + data;
}
var onReady = BX.delegate(function(result){
this.sendRequest({
action: 'deferredLoad',
bigData: 'Y',
items: result && result.items || [],
rid: result && result.id,
count: this.bigData.count,
rowsRange: this.bigData.rowsRange,
shownIds: this.bigData.shownIds
});
}, this);
BX.ajax({
method: 'GET',
dataType: 'json',
url: url,
timeout: 3,
onsuccess: onReady,
onfailure: onReady
});
},
deferredLoad: function()
{
this.sendRequest({action: 'deferredLoad'});
},
sendRequest: function(data)
{
var defaultData = {
siteId: this.siteId,
template: this.template,
parameters: this.parameters
};
if (this.ajaxId)
{
defaultData.AJAX_ID = this.ajaxId;
}
BX.ajax({
url: this.componentPath + '/ajax.php' + (document.location.href.indexOf('clear_cache=Y') !== -1 ? '?clear_cache=Y' : ''),
method: 'POST',
dataType: 'json',
timeout: 60,
data: BX.merge(defaultData, data),
onsuccess: BX.delegate(function(result){
if (!result || !result.JS)
return;
BX.ajax.processScripts(
BX.processHTML(result.JS).SCRIPT,
false,
BX.delegate(function(){this.showAction(result, data);}, this)
);
}, this)
});
},
showAction: function(result, data)
{
if (!data)
return;
switch (data.action)
{
case 'showMore':
this.processShowMoreAction(result);
break;
case 'deferredLoad':
this.processDeferredLoadAction(result, data.bigData === 'Y');
break;
}
},
processShowMoreAction: function(result)
{
this.formPosting = false;
this.enableButton();
if (result)
{
this.navParams.NavPageNomer++;
this.processItems(result.items);
this.processPagination(result.pagination);
this.processEpilogue(result.epilogue);
this.checkButton();
}
},
processDeferredLoadAction: function(result, bigData)
{
if (!result)
return;
var position = bigData ? this.bigData.rows : {};
this.processItems(result.items, BX.util.array_keys(position));
},
processItems: function(itemsHtml, position)
{
if (!itemsHtml)
return;
var processed = BX.processHTML(itemsHtml, false),
temporaryNode = BX.create('DIV');
var items, k, origRows;
temporaryNode.innerHTML = processed.HTML;
items = temporaryNode.querySelectorAll('[data-entity="items-row"]');
if (items.length)
{
this.showHeader(true);
for (k in items)
{
if (items.hasOwnProperty(k))
{
origRows = position ? this.container.querySelectorAll('[data-entity="items-row"]') : false;
items[k].style.opacity = 0;
if (origRows && BX.type.isDomNode(origRows[position[k]]))
{
origRows[position[k]].parentNode.insertBefore(items[k], origRows[position[k]]);
}
else
{
this.container.appendChild(items[k]);
}
}
}
new BX.easing({
duration: 2000,
start: {opacity: 0},
finish: {opacity: 100},
transition: BX.easing.makeEaseOut(BX.easing.transitions.quad),
step: function(state){
for (var k in items)
{
if (items.hasOwnProperty(k))
{
items[k].style.opacity = state.opacity / 100;
}
}
},
complete: function(){
for (var k in items)
{
if (items.hasOwnProperty(k))
{
items[k].removeAttribute('style');
}
}
}
}).animate();
}
BX.ajax.processScripts(processed.SCRIPT);
},
processPagination: function(paginationHtml)
{
if (!paginationHtml)
return;
var pagination = document.querySelectorAll('[data-pagination-num="' + this.navParams.NavNum + '"]');
for (var k in pagination)
{
if (pagination.hasOwnProperty(k))
{
pagination[k].innerHTML = paginationHtml;
}
}
},
processEpilogue: function(epilogueHtml)
{
if (!epilogueHtml)
return;
var processed = BX.processHTML(epilogueHtml, false);
BX.ajax.processScripts(processed.SCRIPT);
},
showHeader: function(animate)
{
var parentNode = BX.findParent(this.container, {attr: {'data-entity': 'parent-container'}}),
header;
if (parentNode && BX.type.isDomNode(parentNode))
{
header = parentNode.querySelector('[data-entity="header"]');
if (header && header.getAttribute('data-showed') != 'true')
{
header.style.display = '';
if (animate)
{
new BX.easing({
duration: 2000,
start: {opacity: 0},
finish: {opacity: 100},
transition: BX.easing.makeEaseOut(BX.easing.transitions.quad),
step: function(state){
header.style.opacity = state.opacity / 100;
},
complete: function(){
header.removeAttribute('style');
header.setAttribute('data-showed', 'true');
}
}).animate();
}
else
{
header.style.opacity = 100;
}
}
}
}
};
})();

@ -0,0 +1,829 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog\ProductTable;
/**
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CatalogSectionComponent $component
* @var CBitrixComponentTemplate $this
* @var string $templateName
* @var string $componentPath
*
* _________________________________________________________________________
* | Attention!
* | The following comments are for system use
* | and are required for the component to work correctly in ajax mode:
* | <!-- items-container -->
* | <!-- pagination-container -->
* | <!-- component-end -->
*/
$this->setFrameMode(true);
if (!empty($arResult['NAV_RESULT']))
{
$navParams = array(
'NavPageCount' => $arResult['NAV_RESULT']->NavPageCount,
'NavPageNomer' => $arResult['NAV_RESULT']->NavPageNomer,
'NavNum' => $arResult['NAV_RESULT']->NavNum
);
}
else
{
$navParams = array(
'NavPageCount' => 1,
'NavPageNomer' => 1,
'NavNum' => $this->randString()
);
}
$showTopPager = false;
$showBottomPager = false;
$showLazyLoad = false;
if ($arParams['PAGE_ELEMENT_COUNT'] > 0 && $navParams['NavPageCount'] > 1)
{
$showTopPager = $arParams['DISPLAY_TOP_PAGER'];
$showBottomPager = $arParams['DISPLAY_BOTTOM_PAGER'];
$showLazyLoad = $arParams['LAZY_LOAD'] === 'Y' && $navParams['NavPageNomer'] != $navParams['NavPageCount'];
}
$templateLibrary = array('popup', 'ajax', 'fx');
$currencyList = '';
if (!empty($arResult['CURRENCIES']))
{
$templateLibrary[] = 'currency';
$currencyList = CUtil::PhpToJSObject($arResult['CURRENCIES'], false, true, true);
}
$templateData = array(
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'TEMPLATE_LIBRARY' => $templateLibrary,
'CURRENCIES' => $currencyList,
'USE_PAGINATION_CONTAINER' => $showTopPager || $showBottomPager,
);
unset($currencyList, $templateLibrary);
$elementEdit = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_EDIT');
$elementDelete = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_DELETE');
$elementDeleteParams = array('CONFIRM' => GetMessage('CT_BCS_TPL_ELEMENT_DELETE_CONFIRM'));
$positionClassMap = array(
'left' => 'product-item-label-left',
'center' => 'product-item-label-center',
'right' => 'product-item-label-right',
'bottom' => 'product-item-label-bottom',
'middle' => 'product-item-label-middle',
'top' => 'product-item-label-top'
);
$discountPositionClass = '';
if ($arParams['SHOW_DISCOUNT_PERCENT'] === 'Y' && !empty($arParams['DISCOUNT_PERCENT_POSITION']))
{
foreach (explode('-', $arParams['DISCOUNT_PERCENT_POSITION']) as $pos)
{
$discountPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$labelPositionClass = '';
if (!empty($arParams['LABEL_PROP_POSITION']))
{
foreach (explode('-', $arParams['LABEL_PROP_POSITION']) as $pos)
{
$labelPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$arParams['~MESS_BTN_BUY'] = ($arParams['~MESS_BTN_BUY'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_BUY');
$arParams['~MESS_BTN_DETAIL'] = ($arParams['~MESS_BTN_DETAIL'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_DETAIL');
$arParams['~MESS_BTN_COMPARE'] = ($arParams['~MESS_BTN_COMPARE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_COMPARE');
$arParams['~MESS_BTN_SUBSCRIBE'] = ($arParams['~MESS_BTN_SUBSCRIBE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_SUBSCRIBE');
$arParams['~MESS_BTN_ADD_TO_BASKET'] = ($arParams['~MESS_BTN_ADD_TO_BASKET'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET');
$arParams['~MESS_NOT_AVAILABLE'] = ($arParams['~MESS_NOT_AVAILABLE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE');
$arParams['~MESS_NOT_AVAILABLE_SERVICE'] = ($arParams['~MESS_NOT_AVAILABLE_SERVICE'] ?? '') ?: Loc::getMessage('CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE');
$arParams['~MESS_SHOW_MAX_QUANTITY'] = ($arParams['~MESS_SHOW_MAX_QUANTITY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_SHOW_MAX_QUANTITY');
$arParams['~MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['~MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['~MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['~MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_BTN_LAZY_LOAD'] = $arParams['MESS_BTN_LAZY_LOAD'] ?: Loc::getMessage('CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD');
$obName = 'ob'.preg_replace('/[^a-zA-Z0-9_]/', 'x', $this->GetEditAreaId($navParams['NavNum']));
$containerName = 'container-'.$navParams['NavNum'];
if ($showTopPager)
{
?>
<div data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
<?
}
//if (!isset($arParams['HIDE_SECTION_DESCRIPTION']) || $arParams['HIDE_SECTION_DESCRIPTION'] !== 'Y')
//{
// ?>
<!-- <div class="bx-section-desc bx---><?php //=$arParams['TEMPLATE_THEME']?><!--">-->
<!-- <p class="bx-section-desc-post">--><?php //=$arResult['DESCRIPTION'] ?? ''?><!--</p>-->
<!-- </div>-->
<!-- --><?//
//}
//?>
<div class="catalog-page__sale sale js-display-list" data-entity="<?=$containerName?>">
<?
if (!empty($arResult['ITEMS']) && !empty($arResult['ITEM_ROWS']))
{
$generalParams = [
'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'],
'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
'SHOW_MAX_QUANTITY' => $arParams['SHOW_MAX_QUANTITY'],
'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
'MESS_SHOW_MAX_QUANTITY' => $arParams['~MESS_SHOW_MAX_QUANTITY'],
'MESS_RELATIVE_QUANTITY_MANY' => $arParams['~MESS_RELATIVE_QUANTITY_MANY'],
'MESS_RELATIVE_QUANTITY_FEW' => $arParams['~MESS_RELATIVE_QUANTITY_FEW'],
'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'],
'USE_PRODUCT_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
'PRODUCT_QUANTITY_VARIABLE' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
'ADD_PROPERTIES_TO_BASKET' => $arParams['ADD_PROPERTIES_TO_BASKET'],
'PRODUCT_PROPS_VARIABLE' => $arParams['PRODUCT_PROPS_VARIABLE'],
'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'],
'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
'COMPARE_PATH' => $arParams['COMPARE_PATH'],
'COMPARE_NAME' => $arParams['COMPARE_NAME'],
'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'],
'PRODUCT_BLOCKS_ORDER' => $arParams['PRODUCT_BLOCKS_ORDER'],
'LABEL_POSITION_CLASS' => $labelPositionClass,
'DISCOUNT_POSITION_CLASS' => $discountPositionClass,
'SLIDER_INTERVAL' => $arParams['SLIDER_INTERVAL'],
'SLIDER_PROGRESS' => $arParams['SLIDER_PROGRESS'],
'~BASKET_URL' => $arParams['~BASKET_URL'],
'~ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
'~BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE'],
'~COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
'~COMPARE_DELETE_URL_TEMPLATE' => $arResult['~COMPARE_DELETE_URL_TEMPLATE'],
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
'BRAND_PROPERTY' => $arParams['BRAND_PROPERTY'],
'MESS_BTN_BUY' => $arParams['~MESS_BTN_BUY'],
'MESS_BTN_DETAIL' => $arParams['~MESS_BTN_DETAIL'],
'MESS_BTN_COMPARE' => $arParams['~MESS_BTN_COMPARE'],
'MESS_BTN_SUBSCRIBE' => $arParams['~MESS_BTN_SUBSCRIBE'],
'MESS_BTN_ADD_TO_BASKET' => $arParams['~MESS_BTN_ADD_TO_BASKET'],
];
$areaIds = [];
$itemParameters = [];
foreach ($arResult['ITEMS'] as $item)
{
$uniqueId = $item['ID'].'_'.md5($this->randString().$component->getAction());
$areaIds[$item['ID']] = $this->GetEditAreaId($uniqueId);
$this->AddEditAction($uniqueId, $item['EDIT_LINK'], $elementEdit);
$this->AddDeleteAction($uniqueId, $item['DELETE_LINK'], $elementDelete, $elementDeleteParams);
$itemParameters[$item['ID']] = [
'SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']],
'MESS_NOT_AVAILABLE' => ($arResult['MODULES']['catalog'] && $item['PRODUCT']['TYPE'] === ProductTable::TYPE_SERVICE
? $arParams['~MESS_NOT_AVAILABLE_SERVICE']
: $arParams['~MESS_NOT_AVAILABLE']
),
];
}
?>
<div class="catalog-page__top">
<div class="select">
<div class="select__name">Сортировать</div>
<select name="sorting" id="sorting">
<option value="default">По популярности</option>
<option value="price_up">По возрастанию цены</option>
<option value="price_down">По убыванию цены</option>
</select>
<svg width="12" height="13" viewbox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2803 4.46967C10.5732 4.76256 10.5732 5.23744 10.2803 5.53033L6.53033 9.28033C6.23744 9.57322 5.76256 9.57322 5.46967 9.28033L1.71967 5.53033C1.42678 5.23744 1.42678 4.76256 1.71967 4.46967C2.01256 4.17678 2.48744 4.17678 2.78033 4.46967L6 7.68934L9.21967 4.46967C9.51256 4.17678 9.98744 4.17678 10.2803 4.46967Z" fill="#939393"></path>
</svg>
</div>
<button class="catalog-page__filters-btn js-show-filter" type="button">
<svg width="24" height="24" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.875 16.125H3.75M20.25 16.125h-2.625M15.75 18a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75ZM7.875 7.875H3.75M20.25 7.875h-8.625M9.75 9.75a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75Z" stroke="#3D3D3D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>
</button>
<div class="display-method">
<button class="display-method__item is-active js-tile" type="button">
<svg width="12" height="12" viewbox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect></svg>
</button>
<button class="display-method__item js-list" type="button">
<svg width="14" height="12" viewbox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="4.667" width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="9.333" width="14" height="2.667" rx="1" fill="currentColor"></rect></svg>
</button>
</div>
</div>
<?
foreach ($arResult['ITEM_ROWS'] as $rowData)
{
$rowItems = array_splice($arResult['ITEMS'], 0, $rowData['COUNT']);
?>
<div class="sale__products <?=$rowData['CLASS']?>" data-entity="items-row">
<?
switch ($rowData['VARIANT'])
{
case 0:
?>
<p>case 0</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<div class="col-xs-12 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = reset($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
</div>
</div>
<?
break;
case 1:
?>
<p>case 1</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 2:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 3:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 4:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 5:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 6:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 col-sm-4 col-md-2">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 7:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 8:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 9:
?>
<div class="col-xs-12">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-12 product-item-line-card">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
}
?>
</div>
<?
}
unset($rowItems);
unset($itemParameters);
unset($areaIds);
unset($generalParams);
?>
<!-- items-container -->
<?
}
?>
<!-- </div>-->
</div>
<div class="pagination">
<?
if ($showLazyLoad)
{
?>
<button class="more__btn button button--outline"
data-use="show-more-<?=$navParams['NavNum']?>">
<?=$arParams['MESS_BTN_LAZY_LOAD']?>
</button>
<?
}
if ($showBottomPager)
{
?>
<div class="pagination-list" data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
</div>
<?
}
$signer = new \Bitrix\Main\Security\Sign\Signer;
$signedTemplate = $signer->sign($templateName, 'catalog.section');
$signedParams = $signer->sign(base64_encode(serialize($arResult['ORIGINAL_PARAMETERS'])), 'catalog.section');
?>
<script>
BX.message({
BTN_MESSAGE_BASKET_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT')?>',
BASKET_URL: '<?=$arParams['BASKET_URL']?>',
ADD_TO_BASKET_OK: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
TITLE_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_ERROR')?>',
TITLE_BASKET_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_BASKET_PROPS')?>',
TITLE_SUCCESSFUL: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
BASKET_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR')?>',
BTN_MESSAGE_SEND_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS')?>',
BTN_MESSAGE_CLOSE: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE')?>',
BTN_MESSAGE_CLOSE_POPUP: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP')?>',
COMPARE_MESSAGE_OK: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_OK')?>',
COMPARE_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR')?>',
COMPARE_TITLE: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_TITLE')?>',
PRICE_TOTAL_PREFIX: '<?=GetMessageJS('CT_BCS_CATALOG_PRICE_TOTAL_PREFIX')?>',
RELATIVE_QUANTITY_MANY: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_MANY'])?>',
RELATIVE_QUANTITY_FEW: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_FEW'])?>',
BTN_MESSAGE_COMPARE_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT')?>',
BTN_MESSAGE_LAZY_LOAD: '<?=CUtil::JSEscape($arParams['MESS_BTN_LAZY_LOAD'])?>',
BTN_MESSAGE_LAZY_LOAD_WAITER: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER')?>',
SITE_ID: '<?=CUtil::JSEscape($component->getSiteId())?>'
});
var <?=$obName?> = new JCCatalogSectionComponent({
siteId: '<?=CUtil::JSEscape($component->getSiteId())?>',
componentPath: '<?=CUtil::JSEscape($componentPath)?>',
navParams: <?=CUtil::PhpToJSObject($navParams)?>,
deferredLoad: false,
initiallyShowHeader: '<?=!empty($arResult['ITEM_ROWS'])?>',
bigData: <?=CUtil::PhpToJSObject($arResult['BIG_DATA'])?>,
lazyLoad: !!'<?=$showLazyLoad?>',
loadOnScroll: !!'<?=($arParams['LOAD_ON_SCROLL'] === 'Y')?>',
template: '<?=CUtil::JSEscape($signedTemplate)?>',
ajaxId: '<?=CUtil::JSEscape($arParams['AJAX_ID'] ?? '')?>',
parameters: '<?=CUtil::JSEscape($signedParams)?>',
container: '<?=$containerName?>'
});
</script>
<!-- component-end -->

@ -0,0 +1,829 @@
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog\ProductTable;
/**
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CatalogSectionComponent $component
* @var CBitrixComponentTemplate $this
* @var string $templateName
* @var string $componentPath
*
* _________________________________________________________________________
* | Attention!
* | The following comments are for system use
* | and are required for the component to work correctly in ajax mode:
* | <!-- items-container -->
* | <!-- pagination-container -->
* | <!-- component-end -->
*/
$this->setFrameMode(true);
if (!empty($arResult['NAV_RESULT']))
{
$navParams = array(
'NavPageCount' => $arResult['NAV_RESULT']->NavPageCount,
'NavPageNomer' => $arResult['NAV_RESULT']->NavPageNomer,
'NavNum' => $arResult['NAV_RESULT']->NavNum
);
}
else
{
$navParams = array(
'NavPageCount' => 1,
'NavPageNomer' => 1,
'NavNum' => $this->randString()
);
}
$showTopPager = false;
$showBottomPager = false;
$showLazyLoad = false;
if ($arParams['PAGE_ELEMENT_COUNT'] > 0 && $navParams['NavPageCount'] > 1)
{
$showTopPager = $arParams['DISPLAY_TOP_PAGER'];
$showBottomPager = $arParams['DISPLAY_BOTTOM_PAGER'];
$showLazyLoad = $arParams['LAZY_LOAD'] === 'Y' && $navParams['NavPageNomer'] != $navParams['NavPageCount'];
}
$templateLibrary = array('popup', 'ajax', 'fx');
$currencyList = '';
if (!empty($arResult['CURRENCIES']))
{
$templateLibrary[] = 'currency';
$currencyList = CUtil::PhpToJSObject($arResult['CURRENCIES'], false, true, true);
}
$templateData = array(
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'TEMPLATE_LIBRARY' => $templateLibrary,
'CURRENCIES' => $currencyList,
'USE_PAGINATION_CONTAINER' => $showTopPager || $showBottomPager,
);
unset($currencyList, $templateLibrary);
$elementEdit = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_EDIT');
$elementDelete = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_DELETE');
$elementDeleteParams = array('CONFIRM' => GetMessage('CT_BCS_TPL_ELEMENT_DELETE_CONFIRM'));
$positionClassMap = array(
'left' => 'product-item-label-left',
'center' => 'product-item-label-center',
'right' => 'product-item-label-right',
'bottom' => 'product-item-label-bottom',
'middle' => 'product-item-label-middle',
'top' => 'product-item-label-top'
);
$discountPositionClass = '';
if ($arParams['SHOW_DISCOUNT_PERCENT'] === 'Y' && !empty($arParams['DISCOUNT_PERCENT_POSITION']))
{
foreach (explode('-', $arParams['DISCOUNT_PERCENT_POSITION']) as $pos)
{
$discountPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$labelPositionClass = '';
if (!empty($arParams['LABEL_PROP_POSITION']))
{
foreach (explode('-', $arParams['LABEL_PROP_POSITION']) as $pos)
{
$labelPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$arParams['~MESS_BTN_BUY'] = ($arParams['~MESS_BTN_BUY'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_BUY');
$arParams['~MESS_BTN_DETAIL'] = ($arParams['~MESS_BTN_DETAIL'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_DETAIL');
$arParams['~MESS_BTN_COMPARE'] = ($arParams['~MESS_BTN_COMPARE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_COMPARE');
$arParams['~MESS_BTN_SUBSCRIBE'] = ($arParams['~MESS_BTN_SUBSCRIBE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_SUBSCRIBE');
$arParams['~MESS_BTN_ADD_TO_BASKET'] = ($arParams['~MESS_BTN_ADD_TO_BASKET'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_BTN_ADD_TO_BASKET');
$arParams['~MESS_NOT_AVAILABLE'] = ($arParams['~MESS_NOT_AVAILABLE'] ?? '') ?: Loc::getMessage('CT_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE');
$arParams['~MESS_NOT_AVAILABLE_SERVICE'] = ($arParams['~MESS_NOT_AVAILABLE_SERVICE'] ?? '') ?: Loc::getMessage('CP_BCS_TPL_MESS_PRODUCT_NOT_AVAILABLE_SERVICE');
$arParams['~MESS_SHOW_MAX_QUANTITY'] = ($arParams['~MESS_SHOW_MAX_QUANTITY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_SHOW_MAX_QUANTITY');
$arParams['~MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['~MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['MESS_RELATIVE_QUANTITY_MANY'] = ($arParams['MESS_RELATIVE_QUANTITY_MANY'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_MANY');
$arParams['~MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['~MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_RELATIVE_QUANTITY_FEW'] = ($arParams['MESS_RELATIVE_QUANTITY_FEW'] ?? '') ?: Loc::getMessage('CT_BCS_CATALOG_RELATIVE_QUANTITY_FEW');
$arParams['MESS_BTN_LAZY_LOAD'] = $arParams['MESS_BTN_LAZY_LOAD'] ?: Loc::getMessage('CT_BCS_CATALOG_MESS_BTN_LAZY_LOAD');
$obName = 'ob'.preg_replace('/[^a-zA-Z0-9_]/', 'x', $this->GetEditAreaId($navParams['NavNum']));
$containerName = 'container-'.$navParams['NavNum'];
if ($showTopPager)
{
?>
<div data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
<?
}
//if (!isset($arParams['HIDE_SECTION_DESCRIPTION']) || $arParams['HIDE_SECTION_DESCRIPTION'] !== 'Y')
//{
// ?>
<!-- <div class="bx-section-desc bx---><?php //=$arParams['TEMPLATE_THEME']?><!--">-->
<!-- <p class="bx-section-desc-post">--><?php //=$arResult['DESCRIPTION'] ?? ''?><!--</p>-->
<!-- </div>-->
<!-- --><?//
//}
//?>
<div class="catalog-page__sale sale js-display-list" data-entity="<?=$containerName?>">
<?
if (!empty($arResult['ITEMS']) && !empty($arResult['ITEM_ROWS']))
{
$generalParams = [
'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'],
'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
'SHOW_MAX_QUANTITY' => $arParams['SHOW_MAX_QUANTITY'],
'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
'MESS_SHOW_MAX_QUANTITY' => $arParams['~MESS_SHOW_MAX_QUANTITY'],
'MESS_RELATIVE_QUANTITY_MANY' => $arParams['~MESS_RELATIVE_QUANTITY_MANY'],
'MESS_RELATIVE_QUANTITY_FEW' => $arParams['~MESS_RELATIVE_QUANTITY_FEW'],
'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'],
'USE_PRODUCT_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
'PRODUCT_QUANTITY_VARIABLE' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
'ADD_PROPERTIES_TO_BASKET' => $arParams['ADD_PROPERTIES_TO_BASKET'],
'PRODUCT_PROPS_VARIABLE' => $arParams['PRODUCT_PROPS_VARIABLE'],
'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'],
'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
'COMPARE_PATH' => $arParams['COMPARE_PATH'],
'COMPARE_NAME' => $arParams['COMPARE_NAME'],
'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'],
'PRODUCT_BLOCKS_ORDER' => $arParams['PRODUCT_BLOCKS_ORDER'],
'LABEL_POSITION_CLASS' => $labelPositionClass,
'DISCOUNT_POSITION_CLASS' => $discountPositionClass,
'SLIDER_INTERVAL' => $arParams['SLIDER_INTERVAL'],
'SLIDER_PROGRESS' => $arParams['SLIDER_PROGRESS'],
'~BASKET_URL' => $arParams['~BASKET_URL'],
'~ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
'~BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE'],
'~COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
'~COMPARE_DELETE_URL_TEMPLATE' => $arResult['~COMPARE_DELETE_URL_TEMPLATE'],
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
'BRAND_PROPERTY' => $arParams['BRAND_PROPERTY'],
'MESS_BTN_BUY' => $arParams['~MESS_BTN_BUY'],
'MESS_BTN_DETAIL' => $arParams['~MESS_BTN_DETAIL'],
'MESS_BTN_COMPARE' => $arParams['~MESS_BTN_COMPARE'],
'MESS_BTN_SUBSCRIBE' => $arParams['~MESS_BTN_SUBSCRIBE'],
'MESS_BTN_ADD_TO_BASKET' => $arParams['~MESS_BTN_ADD_TO_BASKET'],
];
$areaIds = [];
$itemParameters = [];
foreach ($arResult['ITEMS'] as $item)
{
$uniqueId = $item['ID'].'_'.md5($this->randString().$component->getAction());
$areaIds[$item['ID']] = $this->GetEditAreaId($uniqueId);
$this->AddEditAction($uniqueId, $item['EDIT_LINK'], $elementEdit);
$this->AddDeleteAction($uniqueId, $item['DELETE_LINK'], $elementDelete, $elementDeleteParams);
$itemParameters[$item['ID']] = [
'SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']],
'MESS_NOT_AVAILABLE' => ($arResult['MODULES']['catalog'] && $item['PRODUCT']['TYPE'] === ProductTable::TYPE_SERVICE
? $arParams['~MESS_NOT_AVAILABLE_SERVICE']
: $arParams['~MESS_NOT_AVAILABLE']
),
];
}
?>
<div class="catalog-page__top">
<div class="select">
<div class="select__name">Сортировать</div>
<select name="sorting" id="sorting">
<option value="default">По популярности</option>
<option value="price_up">По возрастанию цены</option>
<option value="price_down">По убыванию цены</option>
</select>
<svg width="12" height="13" viewbox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2803 4.46967C10.5732 4.76256 10.5732 5.23744 10.2803 5.53033L6.53033 9.28033C6.23744 9.57322 5.76256 9.57322 5.46967 9.28033L1.71967 5.53033C1.42678 5.23744 1.42678 4.76256 1.71967 4.46967C2.01256 4.17678 2.48744 4.17678 2.78033 4.46967L6 7.68934L9.21967 4.46967C9.51256 4.17678 9.98744 4.17678 10.2803 4.46967Z" fill="#939393"></path>
</svg>
</div>
<button class="catalog-page__filters-btn js-show-filter" type="button">
<svg width="24" height="24" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.875 16.125H3.75M20.25 16.125h-2.625M15.75 18a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75ZM7.875 7.875H3.75M20.25 7.875h-8.625M9.75 9.75a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75Z" stroke="#3D3D3D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>
</button>
<div class="display-method">
<button class="display-method__item is-active js-tile" type="button">
<svg width="12" height="12" viewbox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect></svg>
</button>
<button class="display-method__item js-list" type="button">
<svg width="14" height="12" viewbox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="4.667" width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="9.333" width="14" height="2.667" rx="1" fill="currentColor"></rect></svg>
</button>
</div>
</div>
<?
foreach ($arResult['ITEM_ROWS'] as $rowData)
{
$rowItems = array_splice($arResult['ITEMS'], 0, $rowData['COUNT']);
?>
<div class="sale__products <?=$rowData['CLASS']?>" data-entity="items-row">
<?
switch ($rowData['VARIANT'])
{
case 0:
?>
<p>case 0</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<div class="col-xs-12 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = reset($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
</div>
</div>
<?
break;
case 1:
?>
<p>case 1</p>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
</div>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 2:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 3:
?>
<?
foreach ($rowItems as $item)
{
?>
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<?
}
?>
<?
break;
case 4:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 5:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 6:
?>
<div class="col-xs-12 product-item-small-card">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-6 col-sm-4 col-md-2">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 7:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = array_shift($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
case 8:
$rowItemsCount = count($rowItems);
?>
<div class="col-sm-6 product-item-small-card">
<div class="row">
<?
for ($i = 0; $i < $rowItemsCount - 1; $i++)
{
?>
<div class="col-xs-6 col-md-4">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $rowItems[$i],
'AREA_ID' => $areaIds[$rowItems[$i]['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$rowItems[$i]['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<div class="col-sm-6 product-item-big-card">
<div class="row">
<div class="col-md-12">
<?
$item = end($rowItems);
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'Y'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
unset($item);
?>
</div>
</div>
</div>
<?
break;
case 9:
?>
<div class="col-xs-12">
<div class="row">
<?
foreach ($rowItems as $item)
{
?>
<div class="col-xs-12 product-item-line-card">
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
</div>
<?
}
?>
</div>
</div>
<?
break;
}
?>
</div>
<?
}
unset($rowItems);
unset($itemParameters);
unset($areaIds);
unset($generalParams);
?>
<!-- items-container -->
<?
}
?>
<!-- </div>-->
</div>
<div class="pagination">
<?
if ($showLazyLoad)
{
?>
<button class="more__btn button button--outline"
data-use="show-more-<?=$navParams['NavNum']?>">
<?=$arParams['MESS_BTN_LAZY_LOAD']?>
</button>
<?
}
if ($showBottomPager)
{
?>
<div class="pagination-list" data-pagination-num="<?=$navParams['NavNum']?>">
<!-- pagination-container -->
<?=$arResult['NAV_STRING']?>
<!-- pagination-container -->
</div>
</div>
<?
}
$signer = new \Bitrix\Main\Security\Sign\Signer;
$signedTemplate = $signer->sign($templateName, 'catalog.section');
$signedParams = $signer->sign(base64_encode(serialize($arResult['ORIGINAL_PARAMETERS'])), 'catalog.section');
?>
<script>
BX.message({
BTN_MESSAGE_BASKET_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_BASKET_REDIRECT')?>',
BASKET_URL: '<?=$arParams['BASKET_URL']?>',
ADD_TO_BASKET_OK: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
TITLE_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_ERROR')?>',
TITLE_BASKET_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_TITLE_BASKET_PROPS')?>',
TITLE_SUCCESSFUL: '<?=GetMessageJS('ADD_TO_BASKET_OK')?>',
BASKET_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_BASKET_UNKNOWN_ERROR')?>',
BTN_MESSAGE_SEND_PROPS: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_SEND_PROPS')?>',
BTN_MESSAGE_CLOSE: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE')?>',
BTN_MESSAGE_CLOSE_POPUP: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_CLOSE_POPUP')?>',
COMPARE_MESSAGE_OK: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_OK')?>',
COMPARE_UNKNOWN_ERROR: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_UNKNOWN_ERROR')?>',
COMPARE_TITLE: '<?=GetMessageJS('CT_BCS_CATALOG_MESS_COMPARE_TITLE')?>',
PRICE_TOTAL_PREFIX: '<?=GetMessageJS('CT_BCS_CATALOG_PRICE_TOTAL_PREFIX')?>',
RELATIVE_QUANTITY_MANY: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_MANY'])?>',
RELATIVE_QUANTITY_FEW: '<?=CUtil::JSEscape($arParams['MESS_RELATIVE_QUANTITY_FEW'])?>',
BTN_MESSAGE_COMPARE_REDIRECT: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_COMPARE_REDIRECT')?>',
BTN_MESSAGE_LAZY_LOAD: '<?=CUtil::JSEscape($arParams['MESS_BTN_LAZY_LOAD'])?>',
BTN_MESSAGE_LAZY_LOAD_WAITER: '<?=GetMessageJS('CT_BCS_CATALOG_BTN_MESSAGE_LAZY_LOAD_WAITER')?>',
SITE_ID: '<?=CUtil::JSEscape($component->getSiteId())?>'
});
var <?=$obName?> = new JCCatalogSectionComponent({
siteId: '<?=CUtil::JSEscape($component->getSiteId())?>',
componentPath: '<?=CUtil::JSEscape($componentPath)?>',
navParams: <?=CUtil::PhpToJSObject($navParams)?>,
deferredLoad: false,
initiallyShowHeader: '<?=!empty($arResult['ITEM_ROWS'])?>',
bigData: <?=CUtil::PhpToJSObject($arResult['BIG_DATA'])?>,
lazyLoad: !!'<?=$showLazyLoad?>',
loadOnScroll: !!'<?=($arParams['LOAD_ON_SCROLL'] === 'Y')?>',
template: '<?=CUtil::JSEscape($signedTemplate)?>',
ajaxId: '<?=CUtil::JSEscape($arParams['AJAX_ID'] ?? '')?>',
parameters: '<?=CUtil::JSEscape($signedParams)?>',
container: '<?=$containerName?>'
});
</script>
<!-- component-end -->

@ -0,0 +1,267 @@
<div class="catalog-page__sale sale js-display-list">
<div class="catalog-page__top">
<div class="select">
<div class="select__name">Сортировать</div>
<select name="sorting" id="sorting">
<option value="default">По популярности</option>
<option value="price_up">По возрастанию цены</option>
<option value="price_down">По убыванию цены</option>
</select>
<svg width="12" height="13" viewbox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2803 4.46967C10.5732 4.76256 10.5732 5.23744 10.2803 5.53033L6.53033 9.28033C6.23744 9.57322 5.76256 9.57322 5.46967 9.28033L1.71967 5.53033C1.42678 5.23744 1.42678 4.76256 1.71967 4.46967C2.01256 4.17678 2.48744 4.17678 2.78033 4.46967L6 7.68934L9.21967 4.46967C9.51256 4.17678 9.98744 4.17678 10.2803 4.46967Z" fill="#939393"></path>
</svg>
</div>
<button class="catalog-page__filters-btn js-show-filter" type="button">
<svg width="24" height="24" viewbox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.875 16.125H3.75M20.25 16.125h-2.625M15.75 18a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75ZM7.875 7.875H3.75M20.25 7.875h-8.625M9.75 9.75a1.875 1.875 0 1 0 0-3.75 1.875 1.875 0 0 0 0 3.75Z" stroke="#3D3D3D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>
</button>
<div class="display-method">
<button class="display-method__item is-active js-tile" type="button">
<svg width="12" height="12" viewbox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect><rect x="6.667" y="6.667" width="5.333" height="5.333" rx="1" fill="currentColor"></rect></svg>
</button>
<button class="display-method__item js-list" type="button">
<svg width="14" height="12" viewbox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="4.667" width="14" height="2.667" rx="1" fill="currentColor"></rect><rect y="9.333" width="14" height="2.667" rx="1" fill="currentColor"></rect></svg>
</button>
</div>
</div>
<div class="sale__products">
<?php
use Bitrix\Main\Localization\Loc;
use Bitrix\Catalog\ProductTable;
/**
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CatalogSectionComponent $component
* @var CBitrixComponentTemplate $this
* @var string $templateName
* @var string $componentPath
*
* _________________________________________________________________________
* | Attention!
* | The following comments are for system use
* | and are required for the component to work correctly in ajax mode:
* | <!-- items-container -->
* | <!-- pagination-container -->
* | <!-- component-end -->
*/
$discountPositionClass = '';
if ($arParams['SHOW_DISCOUNT_PERCENT'] === 'Y' && !empty($arParams['DISCOUNT_PERCENT_POSITION']))
{
foreach (explode('-', $arParams['DISCOUNT_PERCENT_POSITION']) as $pos)
{
$discountPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
$labelPositionClass = '';
if (!empty($arParams['LABEL_PROP_POSITION']))
{
foreach (explode('-', $arParams['LABEL_PROP_POSITION']) as $pos)
{
$labelPositionClass .= isset($positionClassMap[$pos]) ? ' '.$positionClassMap[$pos] : '';
}
}
if (!empty($arResult['ITEMS']) && !empty($arResult['ITEM_ROWS']))
{
$generalParams = [
'SHOW_DISCOUNT_PERCENT' => $arParams['SHOW_DISCOUNT_PERCENT'],
'PRODUCT_DISPLAY_MODE' => $arParams['PRODUCT_DISPLAY_MODE'],
'SHOW_MAX_QUANTITY' => $arParams['SHOW_MAX_QUANTITY'],
'RELATIVE_QUANTITY_FACTOR' => $arParams['RELATIVE_QUANTITY_FACTOR'],
'MESS_SHOW_MAX_QUANTITY' => $arParams['~MESS_SHOW_MAX_QUANTITY'],
'MESS_RELATIVE_QUANTITY_MANY' => $arParams['~MESS_RELATIVE_QUANTITY_MANY'],
'MESS_RELATIVE_QUANTITY_FEW' => $arParams['~MESS_RELATIVE_QUANTITY_FEW'],
'SHOW_OLD_PRICE' => $arParams['SHOW_OLD_PRICE'],
'USE_PRODUCT_QUANTITY' => $arParams['USE_PRODUCT_QUANTITY'],
'PRODUCT_QUANTITY_VARIABLE' => $arParams['PRODUCT_QUANTITY_VARIABLE'],
'ADD_TO_BASKET_ACTION' => $arParams['ADD_TO_BASKET_ACTION'],
'ADD_PROPERTIES_TO_BASKET' => $arParams['ADD_PROPERTIES_TO_BASKET'],
'PRODUCT_PROPS_VARIABLE' => $arParams['PRODUCT_PROPS_VARIABLE'],
'SHOW_CLOSE_POPUP' => $arParams['SHOW_CLOSE_POPUP'],
'DISPLAY_COMPARE' => $arParams['DISPLAY_COMPARE'],
'COMPARE_PATH' => $arParams['COMPARE_PATH'],
'COMPARE_NAME' => $arParams['COMPARE_NAME'],
'PRODUCT_SUBSCRIPTION' => $arParams['PRODUCT_SUBSCRIPTION'],
'PRODUCT_BLOCKS_ORDER' => $arParams['PRODUCT_BLOCKS_ORDER'],
'LABEL_POSITION_CLASS' => $labelPositionClass,
'DISCOUNT_POSITION_CLASS' => $discountPositionClass,
'SLIDER_INTERVAL' => $arParams['SLIDER_INTERVAL'],
'SLIDER_PROGRESS' => $arParams['SLIDER_PROGRESS'],
'~BASKET_URL' => $arParams['~BASKET_URL'],
'~ADD_URL_TEMPLATE' => $arResult['~ADD_URL_TEMPLATE'],
'~BUY_URL_TEMPLATE' => $arResult['~BUY_URL_TEMPLATE'],
'~COMPARE_URL_TEMPLATE' => $arResult['~COMPARE_URL_TEMPLATE'],
'~COMPARE_DELETE_URL_TEMPLATE' => $arResult['~COMPARE_DELETE_URL_TEMPLATE'],
'TEMPLATE_THEME' => $arParams['TEMPLATE_THEME'],
'USE_ENHANCED_ECOMMERCE' => $arParams['USE_ENHANCED_ECOMMERCE'],
'DATA_LAYER_NAME' => $arParams['DATA_LAYER_NAME'],
'BRAND_PROPERTY' => $arParams['BRAND_PROPERTY'],
'MESS_BTN_BUY' => $arParams['~MESS_BTN_BUY'],
'MESS_BTN_DETAIL' => $arParams['~MESS_BTN_DETAIL'],
'MESS_BTN_COMPARE' => $arParams['~MESS_BTN_COMPARE'],
'MESS_BTN_SUBSCRIBE' => $arParams['~MESS_BTN_SUBSCRIBE'],
'MESS_BTN_ADD_TO_BASKET' => $arParams['~MESS_BTN_ADD_TO_BASKET'],
];
}
$elementEdit = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_EDIT');
$elementDelete = CIBlock::GetArrayByID($arParams['IBLOCK_ID'], 'ELEMENT_DELETE');
$elementDeleteParams = array('CONFIRM' => GetMessage('CT_BCS_TPL_ELEMENT_DELETE_CONFIRM'));
$areaIds = [];
$itemParameters = [];
foreach ($arResult['ITEMS'] as $item)
{
$uniqueId = $item['ID'].'_'.md5($this->randString().$component->getAction());
$areaIds[$item['ID']] = $this->GetEditAreaId($uniqueId);
$this->AddEditAction($uniqueId, $item['EDIT_LINK'], $elementEdit);
$this->AddDeleteAction($uniqueId, $item['DELETE_LINK'], $elementDelete, $elementDeleteParams);
$itemParameters[$item['ID']] = [
'SKU_PROPS' => $arResult['SKU_PROPS'][$item['IBLOCK_ID']],
'MESS_NOT_AVAILABLE' => ($arResult['MODULES']['catalog'] && $item['PRODUCT']['TYPE'] === ProductTable::TYPE_SERVICE
? $arParams['~MESS_NOT_AVAILABLE_SERVICE']
: $arParams['~MESS_NOT_AVAILABLE']
),
];
}
?>
<!-- items-container -->
<?php foreach ($arResult['ITEM_ROWS'] as $rowData):
$rowItems = array_splice($arResult['ITEMS'], 0, $rowData['COUNT']);
foreach ($rowItems as $item):
?>
<!-- <pre>-->
<!-- --><?// print_r($item['NAME'];); ?>
<!-- </pre>-->
<?
$APPLICATION->IncludeComponent(
'bitrix:catalog.item',
'cat_item',
array(
'RESULT' => array(
'ITEM' => $item,
'AREA_ID' => $areaIds[$item['ID']],
'TYPE' => $rowData['TYPE'],
'BIG_LABEL' => 'N',
'BIG_DISCOUNT_PERCENT' => 'N',
'BIG_BUTTONS' => 'Y',
'SCALABLE' => 'N'
),
'PARAMS' => $generalParams + $itemParameters[$item['ID']],
),
$component,
array('HIDE_ICONS' => 'Y')
);
?>
<!-- <div class="product">-->
<!-- <a class="product__image" href="product.html">-->
<!-- <img src="png/product.png" width="336" height="340" alt="product">-->
<!-- </a>-->
<!-- <div class="product__data-list">-->
<!-- <p class="product__text">1Решение для небольших дачных домов</p>-->
<!-- <div class="product__info">-->
<!-- <p class="product__text">2Пользователей: <span>1-3 чел</span></p>-->
<!-- <p class="product__text">Производительность: <span>0.5м2</span></p>-->
<!-- <p class="product__text">Сброс: <span>150 литров</span></p>-->
<!-- <p class="product__text">Питание: <span>не нужно</span></p>-->
<!-- </div>-->
<!-- <div class="product__rating rating rating--4">4/5</div>-->
<!-- </div>-->
<!-- <div class="product__data">-->
<!-- <div class="product__rating rating rating--4">4/5</div>-->
<!-- <div class="product__info">-->
<!-- <a class="product__title" href="product.html">--><?php //=$item['NAME'];?><!--</a>-->
<!-- <p class="product__text">1Решение для небольших дачных домов</p>-->
<!-- </div>-->
<!-- <div class="product__info">-->
<!-- <p class="product__text">2Пользователей: <span>1-3 чел</span></p>-->
<!-- <p class="product__text">Производительность: <span>0.5м2</span></p>-->
<!-- <p class="product__text">Сброс: <span>150 литров</span></p>-->
<!-- <p class="product__text">Питание: <span>не нужно</span></p>-->
<!-- </div>-->
<!-- <div class="product__price">77 000 ₽</div>-->
<!-- <div class="product__btns">-->
<!-- <button class="button button--orange">Купить</button>-->
<!-- <button class="button button--outline">Купить с установкой</button>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<?php
endforeach;
endforeach; ?>
<!-- <div class="product product--sold">-->
<!-- <a class="product__image" href="product.html">-->
<!-- <img src="png/product.png" width="336" height="340" alt="product">-->
<!-- </a>-->
<!-- <div class="product__data-list">-->
<!-- <p class="product__text">Решение для небольших дачных домов</p>-->
<!-- <div class="product__info">-->
<!-- <p class="product__text">Пользователей: <span>1-3 чел</span></p>-->
<!-- <p class="product__text">Производительность: <span>0.5м2</span></p>-->
<!-- <p class="product__text">Сброс: <span>150 литров</span></p>-->
<!-- <p class="product__text">Питание: <span>не нужно</span></p>-->
<!-- </div>-->
<!-- <div class="product__rating rating rating--4">4/5</div>-->
<!-- </div>-->
<!-- <div class="product__data">-->
<!-- <div class="product__rating rating rating--4">4/5</div>-->
<!-- <div class="product__info">-->
<!-- <a class="product__title" href="product.html">Септик ЭРА 4 прин</a>-->
<!-- <p class="product__text">Решение для небольших дачных домов</p>-->
<!-- </div>-->
<!-- <div class="product__info">-->
<!-- <p class="product__text">Пользователей: <span>1-3 чел</span></p>-->
<!-- <p class="product__text">Производительность: <span>0.5м2</span></p>-->
<!-- <p class="product__text">Сброс: <span>150 литров</span></p>-->
<!-- <p class="product__text">Питание: <span>не нужно</span></p>-->
<!-- </div>-->
<!-- <div class="product__price">77 000 ₽</div>-->
<!-- <div class="product__btns">-->
<!-- Нет в наличии-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
</div>
<div class="pagination">
<button class="more__btn button button--outline">Показать еще</button>
<div class="pagination-list">
<button class="pagination-item button button--outline">
<img src="svg/arrow-left.svg" alt="Предыдущая страница">
</button>
<button class="pagination-item is-active button button--outline">1</button>
<button class="pagination-item button button--outline">2</button>
<button class="pagination-item button button--outline">3</button>
<button class="pagination-item button button--outline">4</button>
<button class="pagination-item button button--outline">5</button>
<button class="pagination-item is-middle button button--outline">
...
</button>
<button class="pagination-item button button--outline">10</button>
<button class="pagination-item button button--outline">
<img src="svg/arrow-right.svg" alt="Предыдущая страница">
</button>
</div>
</div>
</div>
</div>
</section>

@ -0,0 +1,61 @@
/* catalog.section */
.bx_black.bx-section-desc{
border-left-color:#0083d1;
}
.bx_catalog_list_home.bx_black .bx_bt_button {
background:#00a2df;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYTJkZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDZmY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#00a2df),color-stop(100%,#006fcb));
background:-webkit-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -moz-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -ms-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -o-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: linear-gradient(to bottom,#00a2df 0%,#006fcb 100%);
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00a2df',endColorstr='#006fcb',GradientType=0);
color:#fff;
text-shadow: 0 1px 0 #165c99;
display:inline-block;
border-radius:3px;
text-align:center;
text-decoration:none;
font-size:14px;
cursor:pointer;
}
.bx_catalog_list_home.bx_black .bx_bt_button:hover {
background:#26b0e4;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI2YjBlNCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#26b0e4),color-stop(100%,#2684d3));
background:-webkit-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -moz-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -ms-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -o-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: linear-gradient(to bottom,#26b0e4 0%,#2684d3 100%);
filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#26b0e4',endColorstr='#2684d3',GradientType=0 );
}
.bx_catalog_list_home.bx_black .bx_bt_button:active {
background:#0052bf;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwNTJiZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDg1ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#0052bf),color-stop(100%,#0085d3));
background:-webkit-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -moz-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -ms-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -o-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background:linear-gradient(to bottom,#0052bf 0%,#0085d3 100%);
filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#0052bf',endColorstr='#0085d3',GradientType=0 );
}
/* scu_detail_size */
.bx-retina .bx_catalog_list_home.bx_black .bx_item_detail_size ul li.bx_active .cnt{
-webkit-border-image: url(images/x2border_active.png) 2 stretch;
-moz-border-image: url(images/x2border_active.png) 2 stretch;
-o-border-image: url(images/x2border_active.png) 2 stretch;
border-image: url(images/x2border_active.png) 2 fill stretch;
}
/* scu_detail_scu */
.bx-retina .bx_catalog_list_home.bx_black .bx_item_detail_scu .bx_scu ul li.bx_active .cnt{
-webkit-border-image: url(images/x2border_active.png) 2 stretch;
-moz-border-image: url(images/x2border_active.png) 2 stretch;
-o-border-image: url(images/x2border_active.png) 2 stretch;
border-image: url(images/x2border_active.png) 2 fill stretch;
}

@ -0,0 +1 @@
.bx_black.bx-section-desc{border-left-color:#0083d1}.bx_catalog_list_home.bx_black .bx_bt_button{background:#00a2df;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYTJkZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDZmY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#00a2df),color-stop(100%,#006fcb));background:-webkit-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-moz-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-ms-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-o-linear-gradient(top,#00a2df 0,#006fcb 100%);background:linear-gradient(to bottom,#00a2df 0,#006fcb 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00a2df',endColorstr='#006fcb',GradientType=0);color:#fff;text-shadow:0 1px 0 #165c99;display:inline-block;border-radius:3px;text-align:center;text-decoration:none;font-size:14px;cursor:pointer}.bx_catalog_list_home.bx_black .bx_bt_button:hover{background:#26b0e4;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI2YjBlNCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#26b0e4),color-stop(100%,#2684d3));background:-webkit-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-moz-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-ms-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-o-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:linear-gradient(to bottom,#26b0e4 0,#2684d3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#26b0e4',endColorstr='#2684d3',GradientType=0)}.bx_catalog_list_home.bx_black .bx_bt_button:active{background:#0052bf;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwNTJiZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDg1ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#0052bf),color-stop(100%,#0085d3));background:-webkit-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-moz-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-ms-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-o-linear-gradient(top,#0052bf 0,#0085d3 100%);background:linear-gradient(to bottom,#0052bf 0,#0085d3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0052bf',endColorstr='#0085d3',GradientType=0)}.bx-retina .bx_catalog_list_home.bx_black .bx_item_detail_size ul li.bx_active .cnt{-webkit-border-image:url(images/x2border_active.png) 2 stretch;-moz-border-image:url(images/x2border_active.png) 2 stretch;-o-border-image:url(images/x2border_active.png) 2 stretch;border-image:url(images/x2border_active.png) 2 fill stretch}.bx-retina .bx_catalog_list_home.bx_black .bx_item_detail_scu .bx_scu ul li.bx_active .cnt{-webkit-border-image:url(images/x2border_active.png) 2 stretch;-moz-border-image:url(images/x2border_active.png) 2 stretch;-o-border-image:url(images/x2border_active.png) 2 stretch;border-image:url(images/x2border_active.png) 2 fill stretch}

@ -0,0 +1,25 @@
/* catalog.section */
/*
#3052bf
#26b0e4
#00a2df
*/
/* Slider */
.bx-blue .product-item-image-slider-progress-bar { background-color: #0083d1;}
.bx-blue .product-item-image-slider-control:hover{ background-color: rgba(0,131,209,.8);}
.bx-blue .product-item-image-slider-control.active,
.bx-blue .product-item-image-slider-control:hover{ background-color: #0083d1;}
/* SCU */
.bx-blue .product-item-scu-item-text-block:hover,
.bx-blue .product-item-scu-item-color-block:hover,
.bx-blue .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,
.bx-blue .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{ outline-color: #006cc0;}
/* Amount */
.bx-blue .product-item-amount-field:focus{border-color: #006cc0;}
.bx-blue .catalog-section-header{border-color:#006cc0;}

@ -0,0 +1 @@
.bx-blue .product-item-image-slider-progress-bar{background-color:#0083d1}.bx-blue .product-item-image-slider-control:hover{background-color:rgba(0,131,209,.8)}.bx-blue .product-item-image-slider-control.active,.bx-blue .product-item-image-slider-control:hover{background-color:#0083d1}.bx-blue .product-item-scu-item-text-block:hover,.bx-blue .product-item-scu-item-color-block:hover,.bx-blue .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,.bx-blue .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{outline-color:#006cc0}.bx-blue .product-item-amount-field:focus{border-color:#006cc0}.bx-blue .catalog-section-header{border-color:#006cc0}

@ -0,0 +1,26 @@
/* catalog.section */
/*
#63aa28
#6fb32d
#7ab748
#a8d95b
*/
/* Slider */
.bx-green .product-item-image-slider-progress-bar { background-color: #5b9f0b;}
.bx-green .product-item-image-slider-control:hover{ background-color: rgba(91,159,11,.8);}
.bx-green .product-item-image-slider-control.active,
.bx-green .product-item-image-slider-control:hover{ background-color: #5b9f0b;}
/* SCU */
.bx-green .product-item-scu-item-text-block:hover,
.bx-green .product-item-scu-item-color-block:hover,
.bx-green .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,
.bx-green .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{ outline-color: #63aa28;}
/* Amount */
.bx-green .product-item-amount-field:focus{border-color: #63aa28;}
.bx-green .catalog-section-header{border-color:#63aa28;}

@ -0,0 +1 @@
.bx-green .product-item-image-slider-progress-bar{background-color:#5b9f0b}.bx-green .product-item-image-slider-control:hover{background-color:rgba(91,159,11,.8)}.bx-green .product-item-image-slider-control.active,.bx-green .product-item-image-slider-control:hover{background-color:#5b9f0b}.bx-green .product-item-scu-item-text-block:hover,.bx-green .product-item-scu-item-color-block:hover,.bx-green .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,.bx-green .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{outline-color:#63aa28}.bx-green .product-item-amount-field:focus{border-color:#63aa28}.bx-green .catalog-section-header{border-color:#63aa28}

@ -0,0 +1,26 @@
/* catalog.section */
/*
#651c0d
#a9331c
#772c1c
#bd4b35
*/
/* Slider */
.bx-red .product-item-image-slider-progress-bar { background-color: #F42C2C;}
.bx-red .product-item-image-slider-control:hover{ background-color: rgba(244,44,44,.8);}
.bx-red .product-item-image-slider-control.active,
.bx-red .product-item-image-slider-control:hover{ background-color: #F42C2C;}
/* SCU */
.bx-red .product-item-scu-item-text-block:hover,
.bx-red .product-item-scu-item-color-block:hover,
.bx-red .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,
.bx-red .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{ outline-color: #da3737;}
/* Amount */
.bx-red .product-item-amount-field:focus{border-color: #da3737;}
.bx-red .catalog-section-header{border-color:#da3737;}

@ -0,0 +1 @@
.bx-red .product-item-image-slider-progress-bar{background-color:#f42c2c}.bx-red .product-item-image-slider-control:hover{background-color:rgba(244,44,44,.8)}.bx-red .product-item-image-slider-control.active,.bx-red .product-item-image-slider-control:hover{background-color:#f42c2c}.bx-red .product-item-scu-item-text-block:hover,.bx-red .product-item-scu-item-color-block:hover,.bx-red .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,.bx-red .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{outline-color:#da3737}.bx-red .product-item-amount-field:focus{border-color:#da3737}.bx-red .catalog-section-header{border-color:#da3737}

@ -0,0 +1,62 @@
/* catalog.section */
.bx_wood.bx-section-desc{
border-left-color:#0083d1;
}
.bx_catalog_list_home.bx_wood .bx_bt_button {
background:#00a2df;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYTJkZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDZmY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#00a2df),color-stop(100%,#006fcb));
background:-webkit-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -moz-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -ms-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: -o-linear-gradient(top,#00a2df 0%,#006fcb 100%);
background: linear-gradient(to bottom,#00a2df 0%,#006fcb 100%);
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00a2df',endColorstr='#006fcb',GradientType=0);
color:#fff;
text-shadow: 0 1px 0 #165c99;
display:inline-block;
border-radius:3px;
text-align:center;
text-decoration:none;
font-size:14px;
cursor:pointer;
}
.bx_catalog_list_home.bx_wood .bx_bt_button:hover {
background:#26b0e4;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI2YjBlNCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#26b0e4),color-stop(100%,#2684d3));
background:-webkit-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -moz-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -ms-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: -o-linear-gradient(top,#26b0e4 0%,#2684d3 100%);
background: linear-gradient(to bottom,#26b0e4 0%,#2684d3 100%);
filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#26b0e4',endColorstr='#2684d3',GradientType=0 );
}
.bx_catalog_list_home.bx_wood .bx_bt_button:active {
background:#0052bf;
background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwNTJiZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDg1ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#0052bf),color-stop(100%,#0085d3));
background:-webkit-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -moz-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -ms-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background: -o-linear-gradient(top,#0052bf 0%,#0085d3 100%);
background:linear-gradient(to bottom,#0052bf 0%,#0085d3 100%);
filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#0052bf',endColorstr='#0085d3',GradientType=0 );
}
/* scu_detail_size */
.bx-retina .bx_catalog_list_home.bx_wood .bx_item_detail_size ul li.bx_active .cnt{
-webkit-border-image: url(images/x2border_active.png) 2 stretch;
-moz-border-image: url(images/x2border_active.png) 2 stretch;
-o-border-image: url(images/x2border_active.png) 2 stretch;
border-image: url(images/x2border_active.png) 2 fill stretch;
}
/* scu_detail_scu */
.bx-retina .bx_catalog_list_home.bx_wood .bx_item_detail_scu .bx_scu ul li.bx_active .cnt{
-webkit-border-image: url(images/x2border_active.png) 2 stretch;
-moz-border-image: url(images/x2border_active.png) 2 stretch;
-o-border-image: url(images/x2border_active.png) 2 stretch;
border-image: url(images/x2border_active.png) 2 fill stretch;
}

@ -0,0 +1 @@
.bx_wood.bx-section-desc{border-left-color:#0083d1}.bx_catalog_list_home.bx_wood .bx_bt_button{background:#00a2df;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYTJkZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDZmY2IiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#00a2df),color-stop(100%,#006fcb));background:-webkit-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-moz-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-ms-linear-gradient(top,#00a2df 0,#006fcb 100%);background:-o-linear-gradient(top,#00a2df 0,#006fcb 100%);background:linear-gradient(to bottom,#00a2df 0,#006fcb 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00a2df',endColorstr='#006fcb',GradientType=0);color:#fff;text-shadow:0 1px 0 #165c99;display:inline-block;border-radius:3px;text-align:center;text-decoration:none;font-size:14px;cursor:pointer}.bx_catalog_list_home.bx_wood .bx_bt_button:hover{background:#26b0e4;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI2YjBlNCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyNjg0ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#26b0e4),color-stop(100%,#2684d3));background:-webkit-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-moz-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-ms-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:-o-linear-gradient(top,#26b0e4 0,#2684d3 100%);background:linear-gradient(to bottom,#26b0e4 0,#2684d3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#26b0e4',endColorstr='#2684d3',GradientType=0)}.bx_catalog_list_home.bx_wood .bx_bt_button:active{background:#0052bf;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwNTJiZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDg1ZDMiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#0052bf),color-stop(100%,#0085d3));background:-webkit-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-moz-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-ms-linear-gradient(top,#0052bf 0,#0085d3 100%);background:-o-linear-gradient(top,#0052bf 0,#0085d3 100%);background:linear-gradient(to bottom,#0052bf 0,#0085d3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0052bf',endColorstr='#0085d3',GradientType=0)}.bx-retina .bx_catalog_list_home.bx_wood .bx_item_detail_size ul li.bx_active .cnt{-webkit-border-image:url(images/x2border_active.png) 2 stretch;-moz-border-image:url(images/x2border_active.png) 2 stretch;-o-border-image:url(images/x2border_active.png) 2 stretch;border-image:url(images/x2border_active.png) 2 fill stretch}.bx-retina .bx_catalog_list_home.bx_wood .bx_item_detail_scu .bx_scu ul li.bx_active .cnt{-webkit-border-image:url(images/x2border_active.png) 2 stretch;-moz-border-image:url(images/x2border_active.png) 2 stretch;-o-border-image:url(images/x2border_active.png) 2 stretch;border-image:url(images/x2border_active.png) 2 fill stretch}

@ -0,0 +1,26 @@
/* catalog.section */
/*
#f4b236
#f6c042
#f7c95e
#f9d857
*/
/* Slider */
.bx-yellow .product-item-image-slider-progress-bar { background-color: #f9a91d;}
.bx-yellow .product-item-image-slider-control:hover{ background-color: rgba(249,169,29,.8);}
.bx-yellow .product-item-image-slider-control.active,
.bx-yellow .product-item-image-slider-control:hover{ background-color: #f9a91d;}
/* SCU */
.bx-yellow .product-item-scu-item-text-block:hover,
.bx-yellow .product-item-scu-item-color-block:hover,
.bx-yellow .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,
.bx-yellow .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{ outline-color: #f4b236;}
/* Amount */
.bx-yellow .product-item-amount-field:focus{border-color: #f4b236;}
.bx-yellow .catalog-section-header{border-color:#f4b236;}

@ -0,0 +1 @@
.bx-yellow .product-item-image-slider-progress-bar{background-color:#f9a91d}.bx-yellow .product-item-image-slider-control:hover{background-color:rgba(249,169,29,.8)}.bx-yellow .product-item-image-slider-control.active,.bx-yellow .product-item-image-slider-control:hover{background-color:#f9a91d}.bx-yellow .product-item-scu-item-text-block:hover,.bx-yellow .product-item-scu-item-color-block:hover,.bx-yellow .product-item-scu-item-text-container.selected .product-item-scu-item-text-block,.bx-yellow .product-item-scu-item-color-container.selected .product-item-scu-item-color-block{outline-color:#f4b236}.bx-yellow .product-item-amount-field:focus{border-color:#f4b236}.bx-yellow .catalog-section-header{border-color:#f4b236}

@ -0,0 +1,80 @@
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var array $arParams */
/** @var array $arResult */
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponentTemplate $this */
/** @var string $templateName */
/** @var string $templateFile */
/** @var string $templateFolder */
/** @var string $componentPath */
/** @var CBitrixComponent $component */
use Bitrix\Main\Loader;
use Bitrix\Main\ModuleManager;
$this->setFrameMode(true);
if (!isset($arParams['FILTER_VIEW_MODE']) || (string)$arParams['FILTER_VIEW_MODE'] == '')
$arParams['FILTER_VIEW_MODE'] = 'VERTICAL';
$arParams['USE_FILTER'] = (isset($arParams['USE_FILTER']) && $arParams['USE_FILTER'] == 'Y' ? 'Y' : 'N');
$isVerticalFilter = ('Y' == $arParams['USE_FILTER'] && $arParams["FILTER_VIEW_MODE"] == "VERTICAL");
$isSidebar = ($arParams["SIDEBAR_SECTION_SHOW"] == "Y" && isset($arParams["SIDEBAR_PATH"]) && !empty($arParams["SIDEBAR_PATH"]));
$isFilter = ($arParams['USE_FILTER'] == 'Y');
if ($isFilter)
{
$arFilter = array(
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ACTIVE" => "Y",
"GLOBAL_ACTIVE" => "Y",
);
if (0 < intval($arResult["VARIABLES"]["SECTION_ID"]))
$arFilter["ID"] = $arResult["VARIABLES"]["SECTION_ID"];
elseif ('' != $arResult["VARIABLES"]["SECTION_CODE"])
$arFilter["=CODE"] = $arResult["VARIABLES"]["SECTION_CODE"];
$obCache = new CPHPCache();
if ($obCache->InitCache(36000, serialize($arFilter), "/iblock/catalog"))
{
$arCurSection = $obCache->GetVars();
}
elseif ($obCache->StartDataCache())
{
$arCurSection = array();
if (Loader::includeModule("iblock"))
{
$dbRes = CIBlockSection::GetList(array(), $arFilter, false, array("ID"));
if(defined("BX_COMP_MANAGED_CACHE"))
{
global $CACHE_MANAGER;
$CACHE_MANAGER->StartTagCache("/iblock/catalog");
if ($arCurSection = $dbRes->Fetch())
$CACHE_MANAGER->RegisterTag("iblock_id_".$arParams["IBLOCK_ID"]);
$CACHE_MANAGER->EndTagCache();
}
else
{
if(!$arCurSection = $dbRes->Fetch())
$arCurSection = array();
}
}
$obCache->EndDataCache($arCurSection);
}
if (!isset($arCurSection))
$arCurSection = array();
}
// Добавляем номер страницы в заголовок
if (isset($arResult["VARIABLES"]["PAGE"]) && intval($arResult["VARIABLES"]["PAGE"]) > 1) {
$APPLICATION->SetPageProperty("title", $APPLICATION->GetTitle() . " - страница " . $arResult["VARIABLES"]["PAGE"]);
$APPLICATION->SetTitle($APPLICATION->GetTitle() . " - страница " . $arResult["VARIABLES"]["PAGE"]);
}
?>
<?
include($_SERVER["DOCUMENT_ROOT"] . "/" . $this->GetFolder() . "/section_vertical.php");
?>

@ -0,0 +1,33 @@
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$arThemes = array();
$arThemes["site"] = GetMessage("F_THEME_SITE");
$arThemesMessages = array(
"blue" => GetMessage("F_THEME_BLUE"),
"wood" => GetMessage("F_THEME_WOOD"),
"yellow" => GetMessage("F_THEME_YELLOW"),
"green" => GetMessage("F_THEME_GREEN"),
"red" => GetMessage("F_THEME_RED"),
"black" => GetMessage("F_THEME_BLACK")
);
$dir = trim(preg_replace("'[\\\\/]+'", "/", __DIR__."/themes/"));
if (is_dir($dir) && $directory = opendir($dir))
{
while (($file = readdir($directory)) !== false)
{
if ($file != "." && $file != ".." && is_dir($dir.$file))
$arThemes[$file] = (!empty($arThemesMessages[$file]) ? $arThemesMessages[$file] : mb_strtoupper(mb_substr($file, 0, 1)).mb_strtolower(mb_substr($file, 1)));
}
closedir($directory);
}
$arTemplateParameters = array(
"MENU_THEME"=>array(
"NAME" => GetMessage("MENU_THEME"),
"TYPE" => "LIST",
"VALUES" => $arThemes,
"PARENT" => "BASE",
)
);
?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,10 @@
<?
$MESS["MENU_THEME"] = "Menü-Farbschema";
$MESS["F_THEME_SITE"] = "Use site theme (for bitrix.eshop)";
$MESS["F_THEME_BLUE"] = "Blau";
$MESS["F_THEME_WOOD"] = "Holz";
$MESS["F_THEME_YELLOW"] = "Gelb";
$MESS["F_THEME_GREEN"] = "Grün";
$MESS["F_THEME_RED"] = "Rot";
$MESS["F_THEME_BLACK"] = "Dunkel";
?>

@ -0,0 +1,10 @@
<?
$MESS["MENU_THEME"] = "Menu theme";
$MESS["F_THEME_SITE"] = "Use site theme (for bitrix.eshop)";
$MESS["F_THEME_BLUE"] = "Blue";
$MESS["F_THEME_WOOD"] = "Bark";
$MESS["F_THEME_YELLOW"] = "Yellow";
$MESS["F_THEME_GREEN"] = "Green";
$MESS["F_THEME_RED"] = "Red";
$MESS["F_THEME_BLACK"] = "Dark";
?>

@ -0,0 +1,10 @@
<?
$MESS["MENU_THEME"] = "Тема меню";
$MESS["F_THEME_SITE"] = "Брать тему из настроек сайта (для решения bitrix.eshop)";
$MESS["F_THEME_BLUE"] = "Синяя";
$MESS["F_THEME_WOOD"] = "Дерево";
$MESS["F_THEME_YELLOW"] = "Желтая";
$MESS["F_THEME_GREEN"] = "Зеленая";
$MESS["F_THEME_RED"] = "Красная";
$MESS["F_THEME_BLACK"] = "Темная";
?>

@ -0,0 +1,254 @@
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (empty($arResult))
return;
if (isset($arParams["MENU_THEME"]) && !empty($arParams["MENU_THEME"]))
{
$arAvailableThemes = array();
$dir = trim(preg_replace("'[\\\\/]+'", "/", __DIR__."/themes/"));
if (is_dir($dir) && $directory = opendir($dir))
{
while (($file = readdir($directory)) !== false)
{
if ($file != "." && $file != ".." && is_dir($dir.$file))
$arAvailableThemes[] = $file;
}
closedir($directory);
}
if ($arParams["MENU_THEME"] == "site")
{
$solution = COption::GetOptionString("main", "wizard_solution", "", SITE_ID);
if ($solution == "eshop")
{
$theme = COption::GetOptionString("main", "wizard_eshop_adapt_theme_id", "blue", SITE_ID);
$arParams["MENU_THEME"] = (in_array($theme, $arAvailableThemes)) ? $theme : "blue";
}
}
else
{
$arParams["MENU_THEME"] = (in_array($arParams["MENU_THEME"], $arAvailableThemes)) ? $arParams["MENU_THEME"] : "blue";
}
}
else
{
$arParams["MENU_THEME"] = "blue";
}
if(!function_exists("FillAllPicturesAndDescriptionsVertical"))
{
function FillAllPicturesAndDescriptionsVertical(&$arAllItems, $arMenuItemsIDs)
{
//find picture or description for the first level, if it hasn't
foreach ($arMenuItemsIDs as $itemIdLevel_1=>$arLevels2)
{
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] || !$arAllItems[$itemIdLevel_1]["PARAMS"]["description"])
{
foreach($arLevels2 as $itemIdLevel_2=>$arLevels3)
{
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] && $arAllItems[$itemIdLevel_2]["PARAMS"]["picture_src"])
{
$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] = $arAllItems[$itemIdLevel_2]["PARAMS"]["picture_src"];
}
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["description"] && $arAllItems[$itemIdLevel_2]["PARAMS"]["description"])
{
$arAllItems[$itemIdLevel_1]["PARAMS"]["description"] = $arAllItems[$itemIdLevel_2]["PARAMS"]["description"];
}
if ($arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] && $arAllItems[$itemIdLevel_1]["PARAMS"]["description"])
break;
}
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] || !$arAllItems[$itemIdLevel_1]["PARAMS"]["description"])
{
foreach($arLevels2 as $itemIdLevel_2=>$arLevels3)
{
foreach($arLevels3 as $itemIdLevel_3)
{
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] && $arAllItems[$itemIdLevel_3]["PARAMS"]["picture_src"])
{
$arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] = $arAllItems[$itemIdLevel_3]["PARAMS"]["picture_src"];
}
if (!$arAllItems[$itemIdLevel_1]["PARAMS"]["description"] && $arAllItems[$itemIdLevel_3]["PARAMS"]["description"])
{
$arAllItems[$itemIdLevel_1]["PARAMS"]["description"] = $arAllItems[$itemIdLevel_3]["PARAMS"]["description"];
}
if ($arAllItems[$itemIdLevel_1]["PARAMS"]["picture_src"] && $arAllItems[$itemIdLevel_1]["PARAMS"]["description"])
{
break 2;
}
}
}
}
}
}
$pictureLevel_1 = "";
$descriptionLevel_1 = "";
$pictureLevel_2 = "";
$descriptionLevel_2 = "";
foreach($arAllItems as $itemID=>$arItem)
{
if ($arItem["DEPTH_LEVEL"] == "1")
{
if ($arItem["IS_PARENT"])
{
$pictureLevel_1 = $arItem["PARAMS"]["picture_src"];
$descriptionLevel_1 = $arItem["PARAMS"]["description"];
}
$arAllItems[$itemID] = $arItem;
}
elseif($arItem["DEPTH_LEVEL"] == "2")
{
if (!$arItem["PARAMS"]["picture_src"])
$arItem["PARAMS"]["picture_src"] = $pictureLevel_1;
if (!$arItem["PARAMS"]["description"])
$arItem["PARAMS"]["description"] = $descriptionLevel_1;
if ($arItem["IS_PARENT"])
{
$pictureLevel_2 = $arItem["PARAMS"]["picture_src"];
$descriptionLevel_2 = $arItem["PARAMS"]["description"];
}
$arAllItems[$itemID] = $arItem;
}
elseif($arItem["DEPTH_LEVEL"] == "3")
{
if (!$arItem["PARAMS"]["picture_src"])
$arItem["PARAMS"]["picture_src"] = $pictureLevel_2;
if (!$arItem["PARAMS"]["description"])
$arItem["PARAMS"]["description"] = $descriptionLevel_2;
$arAllItems[$itemID] = $arItem;
}
}
}
}
$arSectionsInfo = array();
if (CModule::IncludeModule("iblock"))
{
$arFilter = array(
"TYPE"=>"catalog",
"SITE_ID"=>SITE_ID,
"ACTIVE" => "Y"
);
$obCache = new CPHPCache();
if ($obCache->InitCache(36000, serialize($arFilter), "/iblock/menu"))
{
$arSectionsInfo = $obCache->GetVars();
}
elseif ($obCache->StartDataCache())
{
$dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arFilter);
$dbIBlock = new CIBlockResult($dbIBlock);
$curIblockID = 0;
if ($arIBlock = $dbIBlock->GetNext())
{
$dbSections = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"]), false, array("ID", "SECTION_PAGE_URL", "PICTURE", "DESCRIPTION"));
while($arSections = $dbSections->GetNext())
{
$pictureSrc = CFile::GetFileArray($arSections["PICTURE"]);
if ($pictureSrc)
$arResizePicture = CFile::ResizeImageGet(
$arSections["PICTURE"],
array("width" => 240, 'height'=>700),
BX_RESIZE_IMAGE_PROPORTIONAL,
true
);
$arSectionsInfo[crc32($arSections["SECTION_PAGE_URL"])]["PICTURE"] = $pictureSrc ? $arResizePicture["src"] : false;
$arSectionsInfo[crc32($arSections["SECTION_PAGE_URL"])]["DESCRIPTION"] = $arSections["DESCRIPTION"];
}
if(defined("BX_COMP_MANAGED_CACHE"))
{
global $CACHE_MANAGER;
$CACHE_MANAGER->StartTagCache("/iblock/menu");
$CACHE_MANAGER->RegisterTag("iblock_id_".$arIBlock["ID"]);
$CACHE_MANAGER->EndTagCache();
}
}
$obCache->EndDataCache($arSectionsInfo);
}
}
$arMenuItemsIDs = array();
$arAllItems = array();
foreach($arResult as $key=>$arItem)
{
if($arItem["DEPTH_LEVEL"] > $arParams["MAX_LEVEL"])
{
unset($arResult[$key]);
continue;
}
$arItem["PARAMS"]["item_id"] = crc32($arItem["LINK"]);
$arItem["PARAMS"]["picture_src"] = $arSectionsInfo[$arItem["PARAMS"]["item_id"]]["PICTURE"];
$arItem["PARAMS"]["description"] = $arSectionsInfo[$arItem["PARAMS"]["item_id"]]["DESCRIPTION"];
if ($arItem["DEPTH_LEVEL"] == "1")
{
$arMenuItemsIDs[$arItem["PARAMS"]["item_id"]] = array();
if ($arItem["IS_PARENT"])
{
$curItemLevel_1 = $arItem["PARAMS"]["item_id"];
}
$arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
}
elseif($arItem["DEPTH_LEVEL"] == "2")
{
$arMenuItemsIDs[$curItemLevel_1][$arItem["PARAMS"]["item_id"]] = array();
if ($arItem["IS_PARENT"])
{
$curItemLevel_2 = $arItem["PARAMS"]["item_id"];
}
$arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
}
elseif($arItem["DEPTH_LEVEL"] == "3")
{
$arMenuItemsIDs[$curItemLevel_1][$curItemLevel_2][] = $arItem["PARAMS"]["item_id"];
$arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
}
}
FillAllPicturesAndDescriptionsVertical($arAllItems, $arMenuItemsIDs);
$arMenuStructure = array();
foreach ($arMenuItemsIDs as $itemIdLevel_1=>$arLevels2)
{
$countItemsInRow = 18;
$arMenuStructure[$itemIdLevel_1] = array();
$countLevels2 = count($arLevels2);
if ($countLevels2 > 0)
{
for ($i=1; $i<=3; $i++)
{
$sumElementsInRow = 0;
foreach($arLevels2 as $itemIdLevel_2=>$arLevels3)
{
$sumElementsInRow+= count($arLevels3) + 1;
$arMenuStructure[$itemIdLevel_1][$i][$itemIdLevel_2] = $arLevels3;
if ($sumElementsInRow > $countItemsInRow)
$countItemsInRow = $sumElementsInRow;
unset($arLevels2[$itemIdLevel_2]);
$tmpCount = 0;
foreach($arLevels2 as $tmpItemIdLevel_2=>$arTmpLevels3)
{
$tmpCount+= 1 + count($arTmpLevels3);
}
if ($tmpCount <= $countItemsInRow*(3-$i) && $countItemsInRow<=$sumElementsInRow)
break;
}
}
}
}
$arResult = array();
$arResult["ALL_ITEMS"] = $arAllItems;
$arResult["ALL_ITEMS_ID"] = $arMenuItemsIDs;
$arResult["MENU_STRUCTURE"] = $arMenuStructure;
?>

@ -0,0 +1,124 @@
(function(window) {
if (!window.BX || BX.CatalogVertMenu)
return;
BX.CatalogVertMenu = {
items : {},
idCnt : 1,
currentItem : null,
overItem : null,
outItem : null,
timeoutOver : null,
timeoutOut : null,
getItem : function(item)
{
if (!BX.type.isDomNode(item))
return null;
var id = !item.id || !BX.type.isNotEmptyString(item.id) ? (item.id = "menu-item-vert-" + this.idCnt++) : item.id;
if (!this.items[id])
this.items[id] = new CatalogVertMenuItem(item);
return this.items[id];
},
itemOver : function(item)
{
var menuItem = this.getItem(item);
if (!menuItem)
return;
if (this.outItem == menuItem)
{
clearTimeout(menuItem.timeoutOut);
}
this.overItem = menuItem;
if (menuItem.timeoutOver)
{
clearTimeout(menuItem.timeoutOver);
}
menuItem.timeoutOver = setTimeout(function() {
if (BX.CatalogVertMenu.overItem == menuItem)
{
menuItem.itemOver();
}
}, 100);
},
itemOut : function(item)
{
var menuItem = this.getItem(item);
if (!menuItem)
return;
this.outItem = menuItem;
if (menuItem.timeoutOut)
{
clearTimeout(menuItem.timeoutOut);
}
menuItem.timeoutOut = setTimeout(function() {
if (menuItem != BX.CatalogVertMenu.overItem)
{
menuItem.itemOut();
}
if (menuItem == BX.CatalogVertMenu.outItem)
{
menuItem.itemOut();
}
}, 100);
},
changeSectionPicture : function(element)
{
var descrSpan = BX.nextSibling(element);
var curDescr = descrSpan.innerHTML || '';
if (descrSpan)
{
var curImgWrapObj = BX.nextSibling(descrSpan);
var curImgObj = BX.clone(BX.firstChild(curImgWrapObj));
}
var parentObj = BX.hasClass(element, 'bx_hma_one_lvl') ? element : BX.findParent(element, {className:'bx_hma_one_lvl'});
var sectionImgObj = BX.findChild(parentObj, {className:'bx_section_picture'}, true, false);
sectionImgObj.innerHTML = "";
if (curImgObj)
{
sectionImgObj.appendChild(curImgObj);
}
var sectionDescrObj = BX.findChild(parentObj, {className:'bx_section_description'}, true, false);
sectionDescrObj.innerHTML = curDescr;
BX.previousSibling(sectionDescrObj).innerHTML = element.innerHTML;
sectionImgObj.parentNode.href = element.href;
}
};
var CatalogVertMenuItem = function(item)
{
this.element = item;
this.popup = BX.findChild(item, { className: "bx_children_container" }, false, false);
};
CatalogVertMenuItem.prototype.itemOver = function()
{
if (!BX.hasClass(this.element, "hover"))
{
BX.addClass(this.element, "hover");
}
};
CatalogVertMenuItem.prototype.itemOut = function()
{
BX.removeClass(this.element, "hover");
};
})(window);

@ -0,0 +1 @@
{"version":3,"file":"script.min.js","sources":["script.js"],"names":["window","BX","CatalogVertMenu","items","idCnt","currentItem","overItem","outItem","timeoutOver","timeoutOut","getItem","item","type","isDomNode","id","isNotEmptyString","this","CatalogVertMenuItem","itemOver","menuItem","clearTimeout","setTimeout","itemOut","changeSectionPicture","element","descrSpan","nextSibling","curDescr","innerHTML","curImgWrapObj","curImgObj","clone","firstChild","parentObj","hasClass","findParent","className","sectionImgObj","findChild","appendChild","sectionDescrObj","previousSibling","parentNode","href","popup","prototype","addClass","removeClass"],"mappings":"CAAA,SAAUA,GAET,IAAKA,EAAOC,IAAMA,GAAGC,gBACpB,MAEDD,IAAGC,iBACFC,SACAC,MAAQ,EACRC,YAAc,KACdC,SAAW,KACXC,QAAU,KACVC,YAAc,KACdC,WAAa,KAEbC,QAAU,SAASC,GAElB,IAAKV,GAAGW,KAAKC,UAAUF,GACtB,MAAO,KAER,IAAIG,IAAMH,EAAKG,KAAOb,GAAGW,KAAKG,iBAAiBJ,EAAKG,IAAOH,EAAKG,GAAK,kBAAoBE,KAAKZ,QAAWO,EAAKG,EAE9G,KAAKE,KAAKb,MAAMW,GACfE,KAAKb,MAAMW,GAAM,GAAIG,GAAoBN,EAE1C,OAAOK,MAAKb,MAAMW,IAGnBI,SAAW,SAASP,GAEnB,GAAIQ,GAAWH,KAAKN,QAAQC,EAC5B,KAAKQ,EACJ,MAED,IAAIH,KAAKT,SAAWY,EACpB,CACCC,aAAaD,EAASV,YAGvBO,KAAKV,SAAWa,CAEhB,IAAIA,EAASX,YACb,CACCY,aAAaD,EAASX,aAGvBW,EAASX,YAAca,WAAW,WACjC,GAAIpB,GAAGC,gBAAgBI,UAAYa,EACnC,CACCA,EAASD,aAER,MAGJI,QAAU,SAASX,GAElB,GAAIQ,GAAWH,KAAKN,QAAQC,EAC5B,KAAKQ,EACJ,MAEDH,MAAKT,QAAUY,CAEf,IAAIA,EAASV,WACb,CACCW,aAAaD,EAASV,YAGvBU,EAASV,WAAaY,WAAW,WAEhC,GAAIF,GAAYlB,GAAGC,gBAAgBI,SACnC,CACCa,EAASG,UAEV,GAAIH,GAAYlB,GAAGC,gBAAgBK,QACnC,CACCY,EAASG,YAGR,MAGJC,qBAAuB,SAASC,GAE/B,GAAIC,GAAYxB,GAAGyB,YAAYF,EAC/B,IAAIG,GAAWF,EAAUG,WAAa,EACtC,IAAIH,EACJ,CACC,GAAII,GAAgB5B,GAAGyB,YAAYD,EACnC,IAAIK,GAAY7B,GAAG8B,MAAM9B,GAAG+B,WAAWH,IAExC,GAAII,GAAYhC,GAAGiC,SAASV,EAAS,kBAAoBA,EAAUvB,GAAGkC,WAAWX,GAAUY,UAAU,kBACrG,IAAIC,GAAgBpC,GAAGqC,UAAUL,GAAYG,UAAU,sBAAuB,KAAM,MACpFC,GAAcT,UAAY,EAC1B,IAAIE,EACJ,CACCO,EAAcE,YAAYT,GAE3B,GAAIU,GAAkBvC,GAAGqC,UAAUL,GAAYG,UAAU,0BAA2B,KAAM,MAC1FI,GAAgBZ,UAAYD,CAC5B1B,IAAGwC,gBAAgBD,GAAiBZ,UAAYJ,EAAQI,SACxDS,GAAcK,WAAWC,KAAOnB,EAAQmB,MAI1C,IAAI1B,GAAsB,SAASN,GAElCK,KAAKQ,QAAUb,CACfK,MAAK4B,MAAQ3C,GAAGqC,UAAU3B,GAAQyB,UAAW,yBAA2B,MAAO,OAGhFnB,GAAoB4B,UAAU3B,SAAW,WAExC,IAAKjB,GAAGiC,SAASlB,KAAKQ,QAAS,SAC/B,CACCvB,GAAG6C,SAAS9B,KAAKQ,QAAS,UAI5BP,GAAoB4B,UAAUvB,QAAU,WAEvCrB,GAAG8C,YAAY/B,KAAKQ,QAAS,YAG5BxB"}

@ -0,0 +1,2 @@
(function(t){if(!t.BX||BX.CatalogVertMenu)return;BX.CatalogVertMenu={items:{},idCnt:1,currentItem:null,overItem:null,outItem:null,timeoutOver:null,timeoutOut:null,getItem:function(t){if(!BX.type.isDomNode(t))return null;var i=!t.id||!BX.type.isNotEmptyString(t.id)?t.id="menu-item-vert-"+this.idCnt++:t.id;if(!this.items[i])this.items[i]=new e(t);return this.items[i]},itemOver:function(t){var e=this.getItem(t);if(!e)return;if(this.outItem==e){clearTimeout(e.timeoutOut)}this.overItem=e;if(e.timeoutOver){clearTimeout(e.timeoutOver)}e.timeoutOver=setTimeout(function(){if(BX.CatalogVertMenu.overItem==e){e.itemOver()}},100)},itemOut:function(t){var e=this.getItem(t);if(!e)return;this.outItem=e;if(e.timeoutOut){clearTimeout(e.timeoutOut)}e.timeoutOut=setTimeout(function(){if(e!=BX.CatalogVertMenu.overItem){e.itemOut()}if(e==BX.CatalogVertMenu.outItem){e.itemOut()}},100)},changeSectionPicture:function(t){var e=BX.nextSibling(t);var i=e.innerHTML||"";if(e){var n=BX.nextSibling(e);var r=BX.clone(BX.firstChild(n))}var u=BX.hasClass(t,"bx_hma_one_lvl")?t:BX.findParent(t,{className:"bx_hma_one_lvl"});var o=BX.findChild(u,{className:"bx_section_picture"},true,false);o.innerHTML="";if(r){o.appendChild(r)}var m=BX.findChild(u,{className:"bx_section_description"},true,false);m.innerHTML=i;BX.previousSibling(m).innerHTML=t.innerHTML;o.parentNode.href=t.href}};var e=function(t){this.element=t;this.popup=BX.findChild(t,{className:"bx_children_container"},false,false)};e.prototype.itemOver=function(){if(!BX.hasClass(this.element,"hover")){BX.addClass(this.element,"hover")}};e.prototype.itemOut=function(){BX.removeClass(this.element,"hover")}})(window);
//# sourceMappingURL=script.map.js

@ -0,0 +1,222 @@
.bx_vertical_menu_advanced{
border-left:7px solid #e3eaef;
background:#f1f4f7;
border-radius:4px;
position:relative;
box-shadow:0 0 1px 1px #dcdcdc;
}
.bx_vertical_menu_advanced>ul{
display:block;
margin:0 0 10px 0;
padding:0;
width:100%;
border-radius:5px;
background:#fff;
list-style:none;
}
/* 1 уровень */
.bx_vertical_menu_advanced .bx_hma_one_lvl{
display:block;
padding:0;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl>a{
position:relative;
z-index:105;
display:block;
padding:10px 0 10px 12px;
border-bottom: 1px solid #e3eaef;
color:#000;
vertical-align:middle;
text-align:left;
text-decoration:none;
text-shadow:0 1px 1px rgba(255,255,255,.8);
font-size:14px;
line-height:16px;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl:first-child,
.bx_vertical_menu_advanced .bx_hma_one_lvl:first-child>a{border-radius:0 4px 0 0}
.bx_vertical_menu_advanced .bx_hma_one_lvl:last-child,
.bx_vertical_menu_advanced .bx_hma_one_lvl:last-child>a {border-radius:0 0 4px 0}
.bx_vertical_menu_advanced ul:last-child .bx_hma_one_lvl:last-child>a{border-bottom:none}
.bx_vertical_menu_advanced .bx_hma_one_lvl>a{
-webkit-transition: border-color 0s ease;
-moz-transition: border-color 0s ease;
-o-transition: border-color 0s ease;
-ms-transition: border-color 0s ease;
transition: border-color 0s ease;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl.hover{
padding:1px 0 0;
border:none;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl.hover>a{
margin-left:-11px;
padding:10px 0 10px 12px;
width:100%;
border:none;
border-right:2px;
background:#fff;
box-shadow:-1px 2px 3px 0px rgba(1,1,1,.22);
font-weight:bold;
line-height:16px;
box-sizing:content-box;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl.dropdown.hover{}
.bx_vertical_menu_advanced .bx_hma_one_lvl.dropdown.hover>a{z-index:1500}
.bx_vertical_menu_advanced .bx_hma_one_lvl>a:active,
.bx_vertical_menu_advanced .bx_hma_one_lvl.current>a{}
/* // 1й уровень */
/* Контейнер*/
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container{
position:absolute;
top:-1px;
left:100%;
z-index:1300;
display:none;
overflow:hidden;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
border-top:1px solid rgba(1,1,1,.1);
border-radius:2px;
background:#fff;
box-shadow:0 5px 10px 0 rgba(1,1,1,.29);
}
.bx_vertical_menu_advanced .bx_hma_one_lvl.hover .bx_children_container{display:block}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block{
float:left;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
margin-bottom:-20000px;
padding:10px 12px;
padding-bottom:20000px;
min-width:130px;
max-width:280px;
border-left:1px solid #f2f2f2;
background:#fff;
}
.bx_shadow_fix{display:none}
.bx_vertical_menu_advanced .dropdown:hover .bx_shadow_fix,
.bx_vertical_menu_advanced .dropdown.hover .bx_shadow_fix{
position: absolute;
top: -1px;
right: -2px;
bottom: 0;
z-index: 1500;
display: block;
width: 5px;
background: #fff;
opacity: 1;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b1{min-width:180px}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b2{min-width:360px}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b3{min-width:540px}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b4{min-width:720px}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block:first-child{border-left:none}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b1 .bx_children_block{width:100%}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b2 .bx_children_block{width:50%}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b3 .bx_children_block{width:33.3%}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container.b4 .bx_children_block{width:25%}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block.advanced{
border-left:none;
background:#f7fafb;
box-shadow:inset 5px 0 7px -5px rgba(0,0,0,.12);
}
/*// Контейнер*/
/* 2й уровень*/
.bx_vertical_menu_advanced .bx_hma_one_lvl ul{
display:block;
margin:0;
padding:0 0 14px 0;
list-style:none;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_advanced_panel {
display: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
text-align: center;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{
display:block;
padding:5px 10px;
}
/*.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{
color: #366181;
}*/
/* //2й уровень*/
/* 3й уровень */
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul{border-bottom:1px solid #f2f2f2}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent:last-child ul{border-bottom:none}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul li{line-height:24px}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a{
display:block;
padding:5px 10px;
}
/*.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background:#f0f6f8;
box-shadow:inset 0 1px 1px 0 #e3e9eb;
}*/
/* // 3й уровень */
/* Панель */
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_advanced_panel{
display:none;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
text-align:center;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_block.advanced .bx_children_advanced_panel{display:block !important}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_advanced_panel img{
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
max-width:100%;
max-height:220px;
border:1px solid #e7e9ea;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_advanced_panel .bx_item_description{
max-width:100%;
max-height:220px;
color:#000;
text-align:left;
white-space:normal;
font-weight:normal;
font-size:12px;
line-height:18px;
}
/* // Панель*/
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block>ul>li{
display:block;
background:#fff;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl .bx_children_container .bx_children_block>ul>li>a{
display:block;
color:#20394c;
text-decoration:none;
font-weight:bold;
font-size:15px;
line-height:23px;
}
.bx_vertical_menu_advanced .bx_hma_one_lvl ul li ul li a{
color:#000;
text-decoration:none;
font-size:13px;
line-height:16px;
}
@media (max-width:569px) {
.bx_vertical_menu_advanced{display:none}
.header_inner_bottom_line{
overflow:hidden;
height:auto;
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,48 @@
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (empty($arResult["ALL_ITEMS"]))
return;
if (file_exists($_SERVER["DOCUMENT_ROOT"].$this->GetFolder().'/themes/'.$arParams["MENU_THEME"].'/colors.css'))
$APPLICATION->SetAdditionalCSS($this->GetFolder().'/themes/'.$arParams["MENU_THEME"].'/colors.css');
CJSCore::Init();
$menuBlockId = "catalog_menu_".$this->randString();
//debug($arResult);
?>
<div class="filter__item filter__item--list">
<?foreach($arResult["MENU_STRUCTURE"] as $itemID => $arColumns):?> <!-- first level-->
<a class="filter__category is-active filter__category--base" href="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>" >
<?=$arResult["ALL_ITEMS"][$itemID]["TEXT"]?>
<!-- <span>48</span>-->
</a>
<?foreach($arColumns as $key=>$arRow):?>
<?foreach($arRow as $itemIdLevel_2=>$arLevel_3):?> <!-- second level-->
<a class="filter__category" href="<?=$arResult["ALL_ITEMS"][$itemIdLevel_2]["LINK"]?>">
<?=$arResult["ALL_ITEMS"][$itemIdLevel_2]["TEXT"]?>
<!-- <span>10</span>-->
</a>
<?endforeach;?>
<?endforeach;?>
<?endforeach;?>
</div>

@ -0,0 +1,27 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_black{
border-left:7px solid #e3eaef;
background:#f1f4f7;
}
/* // 1st level */
.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl>a{
border-bottom: 1px solid #e3eaef;
}
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #20394C}
.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #366181}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background: #F0F6F8;
box-shadow: inset 0 1px 1px 0 #E3E9EB;
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_black{border-left:7px solid #e3eaef;background:#f1f4f7}.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl>a{border-bottom:1px solid #e3eaef}.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#20394c}.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#366181}.bx_vertical_menu_advanced.bx_black .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f0f6f8;box-shadow:inset 0 1px 1px 0 #e3e9eb}

@ -0,0 +1,25 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_blue{
border-left:7px solid #e4f0f7;
background:#f6f9fb;
}
/* // 1st level */
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #20394C}
.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #366181}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background: #F0F6F8;
box-shadow: inset 0 1px 1px 0 #E3E9EB;
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_blue{border-left:7px solid #e4f0f7;background:#f6f9fb}.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#20394c}.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#366181}.bx_vertical_menu_advanced.bx_blue .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f0f6f8;box-shadow:inset 0 1px 1px 0 #e3e9eb}

@ -0,0 +1,25 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_green{
border-left:7px solid #a7d380;
background:#bdeb94;
}
/* // 1st level */
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #746b21}
.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #564f17}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background:#f7f3e0;
box-shadow:inset 0 1px 1px 0 #ebe9e3
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_green{border-left:7px solid #a7d380;background:#bdeb94}.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#746b21}.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#564f17}.bx_vertical_menu_advanced.bx_green .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f7f3e0;box-shadow:inset 0 1px 1px 0 #ebe9e3}

@ -0,0 +1,26 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_red{
border-left:7px solid #f0bdb5;
background:#fbf1f0;
}
/* // 1st level */
.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl>a{
border-bottom: 1px solid #f9e6e3;
}
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #742B21}
.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #742121}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background:#f7f3e0;
box-shadow:inset 0 1px 1px 0 #ebe9e3
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_red{border-left:7px solid #f0bdb5;background:#fbf1f0}.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl>a{border-bottom:1px solid #f9e6e3}.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#742b21}.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#742121}.bx_vertical_menu_advanced.bx_red .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f7f3e0;box-shadow:inset 0 1px 1px 0 #ebe9e3}

@ -0,0 +1,25 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_wood{
border-left:7px solid #e4f0f7;
background:#f6f9fb;
}
/* // 1st level */
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #20394C}
.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #366181}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background: #F0F6F8;
box-shadow: inset 0 1px 1px 0 #E3E9EB;
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_wood{border-left:7px solid #e4f0f7;background:#f6f9fb}.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#20394c}.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#366181}.bx_vertical_menu_advanced.bx_wood .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f0f6f8;box-shadow:inset 0 1px 1px 0 #e3e9eb}

@ -0,0 +1,25 @@
/* 1st level */
.bx_vertical_menu_advanced.bx_yellow{
border-left:7px solid #F2E9B2;
background:#FEFAD5;
}
/* // 1st level */
/* The Container */
/*// Container */
/* 2nd level*/
.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color: #746b21}
.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color: #564f17}
/* // 2nd level*/
/* 3rd level */
.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{
background:#f7f3e0;
box-shadow:inset 0 1px 1px 0 #ebe9e3
}
/* // 3rd level */
/* Panel */
/* // The Panel*/

@ -0,0 +1 @@
.bx_vertical_menu_advanced.bx_yellow{border-left:7px solid #f2e9b2;background:#fefad5}.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a{color:#746b21}.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent>a:hover{color:#564f17}.bx_vertical_menu_advanced.bx_yellow .bx_hma_one_lvl .bx_children_container .bx_children_block li.parent ul a:hover{background:#f7f3e0;box-shadow:inset 0 1px 1px 0 #ebe9e3}

@ -0,0 +1,5 @@
<?
return array(
"NAME" => "Услуги (кастомный шаблон)",
"DESCRIPTION" => "Шаблон для компонента bitrix:news (услуги)",
);

@ -0,0 +1,43 @@
.services-list {
display: flex;
flex-wrap: wrap;
gap: 24px;
}
.service-item {
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 16px;
width: 300px;
box-shadow: 0 2px 8px rgba(0,0,0,0.04);
background: #fff;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.service-item h2 {
font-size: 1.2em;
margin: 0 0 8px 0;
}
.service-item img {
max-width: 100%;
border-radius: 4px;
margin-bottom: 8px;
}
.service-desc {
margin-bottom: 8px;
color: #444;
}
.service-price {
font-weight: bold;
color: #1a7f37;
margin-bottom: 8px;
}
.service-item a {
margin-top: auto;
color: #1976d2;
text-decoration: none;
font-weight: 500;
}
.service-item a:hover {
text-decoration: underline;
}

@ -0,0 +1,21 @@
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="services-list">
<?foreach(
$arResult["ITEMS"] as $arItem):?>
<div class="service-item">
<h2><?=$arItem["NAME"]?></h2>
<?if($arItem["PREVIEW_PICTURE"]):?>
<img src="<?=$arItem["PREVIEW_PICTURE"]["SRC"]?>" alt="<?=$arItem["NAME"]?>">
<?endif;?>
<div class="service-desc">
<?=$arItem["PREVIEW_TEXT"]?>
</div>
<?if($arItem["PROPERTIES"]["PRICE"]["VALUE"]):?>
<div class="service-price">
Цена: <?=$arItem["PROPERTIES"]["PRICE"]["VALUE"]?>
</div>
<?endif;?>
<a href="<?=$arItem["DETAIL_PAGE_URL"]?>">Подробнее</a>
</div>
<?endforeach;?>
</div>

@ -9,10 +9,194 @@
display: none;
}
.success-order__content{
display: flex
;
flex-direction: column;
align-items: center;
gap: 30px;
}
.product__btns{
flex-wrap: nowrap;
}
.cart-page--empty .cart-empty{
display: flex !important;
}
.footer-widget-icons{
position: fixed;
right: 28px;
bottom: 68px;
display: flex;
gap: 15px;
flex-direction: column;
}
.footer-widget-icons img{
margin: 0;
cursor: pointer;
}
.footer-popup {
position: fixed;
z-index: 1100;
left: 0; top: 0; right: 0; bottom: 0;
background: rgba(0,0,0,0.45);
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.2s;
}
.footer-popup__content {
background: #fff;
border-radius: 16px;
padding: 40px;
max-width: 480px;
width: 100%;
box-shadow: 0 8px 32px rgba(0,0,0,0.18);
position: relative;
display: flex;
flex-direction: column;
align-items: stretch;
}
.footer-popup__close {
position: absolute;
top: 12px;
right: 12px;
background: none;
border: none;
font-size: 28px;
color: #888;
cursor: pointer;
line-height: 1;
}
.footer-popup__title {
font-size: 40Px;
font-weight: 900;
margin: 0 auto 40px;
width:70%;
text-align: center;
}
.footer-popup__form .input {
margin-bottom: 20px;
padding: 10px 12px;
border: 1px solid #e0e0e0;
border-radius: 12px;
font-size: 1rem;
width: 100%;
background: #fff;
box-sizing: border-box;
}
.footer-popup__form .button--orange {
margin-top: 40px;
height: 48px;
width: 100%;
}
.footer-popup__personal {
font-size: 0.85rem;
color: #888;
margin-top: 10px;
}
.footer-popup__personal a{
color: #FF7F23;
}
@media (max-width: 600px) {
.footer-popup__content {
max-width: 95vw;
padding: 18px 6vw 18px 6vw;
}
.footer-widget-icons {
right: 10px;
bottom: 10px;
}
}
.cookie-banner {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #13795b;
color: #fff;
padding: 12px 0 12px 0;
display: flex;
align-items: center;
justify-content: center;
gap: 16px;
font-size: 15px;
z-index: 1200;
box-shadow: 0 -2px 12px rgba(0,0,0,0.10);
}
.cookie-banner a {
color: #fff;
text-decoration: underline;
}
.cookie-banner .button--orange {
margin-left: 12px;
padding: 6px 18px;
font-size: 15px;
}
.search-result-img{
width: 50px;
}
.search-result-item{
gap: 16px;
display: flex
;
align-items: center;
border-bottom: 1px solid #E2E2E2;
padding: 16px 0;
}
.header__search-block {
display: none;
}
.header__search-block.active {
display: block;
}
.search-result-item span{
font-weight: 400;
font-size: 16px;
line-height: 130%;
flex: 1;
letter-spacing: 0%;
}
.search-result-price{
font-weight: 400;
font-size: 16px;
line-height: 130%;
letter-spacing: 0%;
color: #939393;
}
.calc__actions {
margin-top: 20px;
text-align: center;
}
.calc__actions .button {
min-width: 200px;
}
/* Изначально скрываем контейнер с результатами */
#calculator-container {
display: none;
}
.cart-page__item-quantity {
padding: 0;
width: 79px;
@ -182,10 +366,268 @@
max-width: 100%;
}
}
@media (max-width: 980px) {
.reviews__list .iframe-box{
width: 100% !important;
}
}
.success-order__content{
display: flex;
.completed-objects__list {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 52px 60px;
display: grid;
}
@media (width <= 1024px) {
.completed-objects__list {
gap: 44px 32px;
}
}
@media (width <= 744px) {
.completed-objects__list {
grid-template-columns: auto;
grid-auto-flow: row;
row-gap: 65px;
}
}
@media (width <= 540px) {
.completed-objects__list {
row-gap: 40px;
}
}
.completed-objects__item {
box-sizing: border-box;
}
.completed-objects__item:hover .completed-objects__image:before, .completed-objects__item:hover .completed-objects__image .completed-objects__image-details {
opacity: 1;
}
.completed-objects__item:hover .completed-objects__title {
color: #ff7f23;
}
.completed-objects__item--green {
color: #fff;
background-color: #097359;
border-radius: 24px;
flex-direction: column;
justify-content: space-between;
height: max-content;
min-height: 280px;
padding: 28px;
display: flex;
position: relative;
overflow: hidden;
}
@media (width <= 540px) {
.completed-objects__item--green {
min-height: 192px;
padding: 24px;
}
}
.completed-objects__item--green:hover:after {
transform: rotate(0)translate(0);
}
.completed-objects__item--green:hover .completed-objects__title {
color: inherit;
}
.completed-objects__item--green:after {
content: "";
pointer-events: none;
background-image: url("/local/templates/EraSeptik/build/svg/blocknote.svg");
background-position: 100% 100%;
background-repeat: no-repeat;
background-size: contain;
width: 227px;
height: 185px;
transition: transform .5s ease-in-out;
position: absolute;
bottom: 0;
right: 0;
transform: rotate(15deg)translate(70px, 50px);
}
@media (width <= 540px) {
.completed-objects__item--green:after {
content: none;
}
}
.completed-objects__item--green .completed-objects__link {
z-index: 1;
font-size: 20px;
position: relative;
}
@media (width <= 1024px) {
.completed-objects__item--green .completed-objects__link {
font-size: 16px;
}
}
@media (width <= 540px) {
.completed-objects__item--green .completed-objects__link {
display: block;
}
}
.completed-objects__item--green .completed-objects__link:after {
height: 20px;
top: 5px;
}
@media (width <= 1024px) {
.completed-objects__item--green .completed-objects__link:after {
height: 14px;
top: 2px;
}
}
.completed-objects__image {
box-sizing: border-box;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
border-radius: 24px;
align-items: flex-end;
min-height: 280px;
margin-bottom: 20px;
padding: 32px;
display: flex;
position: relative;
}
@media (width <= 540px) {
.completed-objects__image {
border-radius: 20px;
margin-bottom: 12px;
padding: 20px;
}
}
.completed-objects__image:before {
content: "";
border-radius: inherit;
opacity: 0;
background-image: linear-gradient(#0000 0%, #000c 100%);
transition: opacity .2s ease-out;
position: absolute;
inset: 0;
}
@media (width <= 540px) {
.completed-objects__image:before {
opacity: 1;
background-image: linear-gradient(#0000 0%, #0006 100%);
}
}
.completed-objects__image-details {
color: #fff;
opacity: 0;
justify-content: space-between;
align-items: center;
gap: 16px;
width: 100%;
transition: opacity .2s ease-out;
display: flex;
position: relative;
}
@media (width <= 540px) {
.completed-objects__image-details {
opacity: 1;
}
}
.completed-objects__link {
font-weight: 700;
}
@media (width <= 540px) {
.completed-objects__link {
display: none;
}
}
.completed-objects__link:after {
content: "";
background-image: url("/local/templates/EraSeptik/build/svg/arrow-category.svg");
background-repeat: no-repeat;
background-size: contain;
width: 20px;
height: 14px;
margin-left: 8px;
display: inline-block;
position: relative;
top: 2px;
}
@media (width <= 1024px) {
.completed-objects__link:after {
width: 14px;
height: 16px;
}
}
.completed-objects__title {
margin-bottom: 8px;
font-size: 24px;
transition: color .2s ease-out;
}
@media (width <= 540px) {
.completed-objects__title {
font-size: 20px;
}
}
.completed-objects__info {
margin-bottom: 16px;
line-height: 1.3em;
}
.completed-objects__sub {
color: #939393;
margin-bottom: 8px;
line-height: 1.3em;
}
@media (width <= 540px) {
.completed-objects__sub {
margin-bottom: 10px;
}
}
.completed-objects__data {
color: #939393;
max-height: 2.6em;
margin: 0;
padding: 0;
list-style: none;
overflow: hidden;
}
.completed-objects__data-item {
line-height: 1.3;
}
.completed-objects__data-item:before {
content: "-";
margin-right: 3px;
display: inline-block;
}
@media (width <= 540px) {
.completed-objects__date {
display: block;
}
}

@ -259,7 +259,7 @@ function showSearchResults(results, blockId) {
`<a href="${item.url}" class="search-result-item"><img src="${item.img}" alt="${item.title}" class="search-result-img"><span>${item.title}</span>${item.price ? `<div class='search-result-price'>${item.price}</div>` : ''}</a>`
).join('') + '</div>';
} else {
html = '<div class="search-results-empty">Ничего не найдено</div>';
html = '<div class="search-results-empty">По вашему запросу ничего не найдено</div>';
}
block.insertAdjacentHTML('beforeend', html);
}

@ -140,17 +140,12 @@ parcelRegister("6aHKA", function(module, exports) {
const cartContent = document.querySelector(".js-cart__page");
const cartOrderSuccess = document.querySelector(".js-cart__success-order");
const cartBreadcrumbs = document.querySelector(".js-cart__breadcrumbs");
if (orderBtn){
orderBtn.addEventListener("click", ()=>{
cartPopup.classList.remove("cart-popup__wrapper--hidden");
});
}
if (closeBtn){
closeBtn.addEventListener("click", ()=>{
cartPopup.classList.add("cart-popup__wrapper--hidden");
});
}
if (submitBtn){
submitBtn.addEventListener("click", (e)=>{
e.preventDefault();
cartPopup.classList.add("cart-popup__wrapper--hidden");
@ -158,17 +153,12 @@ parcelRegister("6aHKA", function(module, exports) {
cartOrderSuccess.classList.add("success-order--visible");
cartBreadcrumbs.remove();
});
}
if (cartPopup){
cartPopup.addEventListener("click", (e)=>{
if (!document.querySelector(".cart-popup").contains(e.target)) cartPopup.classList.add("cart-popup__wrapper--hidden");
});
}
const cartSelect = document.querySelector(".js-cart__order-select");
const cartSelfDelivery = document.querySelector(".js-cart__self-delivery");
const cartServiceDelivery = document.querySelectorAll(".js-cart__service-delivery");
if (cartSelect){
cartSelect.addEventListener("change", ()=>{
const selectedValue = cartSelect.value;
if (selectedValue === "self-delivery") {
@ -183,8 +173,6 @@ parcelRegister("6aHKA", function(module, exports) {
});
}
});
}
});

@ -1,20 +1,46 @@
<?php
use Bitrix\Main\Page\Asset;
use Bitrix\Main\Page\Asset;
?>
</main>
<?php if (!preg_match('#^/services(/|$)#', $_SERVER['REQUEST_URI'])): ?>
<section class="consultation container">
<h2 class="consultation__title">Нужна консультация?</h2>
<form action="#" class="consultation__form">
<input type="text" class="input" placeholder="Ваше имя">
<input type="tel" class="input" placeholder="Номер телефона">
<form action="#" class="consultation__form" onsubmit="handleConsultationForm(this); return false;"> <input type="hidden" name="consultation_form" value="Y">
<input type="text" class="input" name="name" placeholder="Ваше имя" required>
<input type="tel" class="input" name="phone" placeholder="Номер телефона" required>
<button class="button button--orange">Получить консультацию</button>
</form>
<div class="consultation__info">
Нажимая кнопку «Получить консультацию», вы соглашаетесь с <a href="#" class="consultation__info--link"><u>условиями
конфиденциальности</u></a>
</div>
</section>
<?php endif; ?>
<?php if (preg_match('#^/services(/|$)#', $_SERVER['REQUEST_URI'])): ?>
<section class="order-call container section">
<div class="order-call__wrap" style="background-image: url('<?=SITE_TEMPLATE_PATH?>/images/png/house.png')">
<form class="order-call__data" action="#" onsubmit="handleConsultationForm(this); return false;">
<input type="hidden" name="order_call_form" value="Y">
<h2 class="section-title">
Рассчитать септик <span class="orange-text">за 5 минут!</span>
</h2>
<p class="order-call__info">Наш менеджер свяжется с вами в ближайшее время</p>
<input type="text" class="input" name="name" placeholder="Ваше имя" required>
<input type="tel" class="input" name="phone" placeholder="Номер телефона" required>
<button class="button button--orange">Заказать звонок</button>
<p class="order-call__personal">
Нажимая кнопку «Заказать звонок», вы подтверждаете свое согласие на
обработку <a href="#">персональных данных</a>
</p>
</form>
</div>
</section>
<?php endif; ?>
<section class="tap-bar">
<div class="tap-bar__item">
<a class="tap-bar__link" href="/">
@ -257,12 +283,76 @@
);?>
</div>
</div>
<div class="footer-widget-icons">
<button class="footer-widget-icon" id="footer-mail-btn" type="button" title="Почта">
<picture>
<source srcset="<?=SITE_TEMPLATE_PATH?>/images/svg/email_footer.svg" type="image/webp">
<img class="choose__content-icon" src="<?=SITE_TEMPLATE_PATH?>/images/svg/email_footer.svg" alt="Smile-icon">
</picture>
</button>
<a class="footer-widget-icon" href="tel:+79260084132" title="Позвонить">
<picture>
<source srcset="<?=SITE_TEMPLATE_PATH?>/images/svg/phone_footer.svg" type="image/webp">
<img class="choose__content-icon" src="<?=SITE_TEMPLATE_PATH?>/images/svg/phone_footer.svg" alt="Smile-icon">
</picture>
</a>
</div>
<div class="footer-popup" id="footer-popup" style="display:none;">
<div class="footer-popup__content">
<button class="footer-popup__close" id="footer-popup-close" type="button">×</button>
<h2 class="footer-popup__title">Получить консультацию</h2>
<form class="footer-popup__form" action="#" onsubmit="handleConsultationForm(this); return false;">
<input type="hidden" name="footer_popup_form" value="Y">
<input type="text" class="input" name="name" placeholder="Имя" required>
<input type="tel" class="input" name="phone" placeholder="Номер телефона*" required>
<input type="email" class="input" name="email" placeholder="Почта">
<button class="button button--orange" type="submit">Отправить заявку</button>
<p class="footer-popup__personal">
Нажимая на кнопку «Оформить заказ», вы соглашаетесь с <a href="#" target="_blank">условиями конфиденциальности</a>
</p>
</form>
</div>
</div>
</footer>
<div class="cookie-banner" id="cookie-banner">
<span>Продолжая просматривать страницы веб-сайта или нажав кнопку Принять, вы соглашаетесь с <a href="#" target="_blank">политикой конфиденциальности</a></span>
<button class="button button--orange" id="cookie-accept">Принять</button>
</div>
<script type="module" src="<?= DEFAULT_TEMPLATE_PATH . '/js/main.js' ?>"></script>
<?php
Asset::getInstance()->addJs(DEFAULT_TEMPLATE_PATH . '/js/libs/fancybox.umd.js');
Asset::getInstance()->addJs(DEFAULT_TEMPLATE_PATH . '/js/custom.js');
?>
<script>
// Открытие попапа
const mailBtn = document.getElementById('footer-mail-btn');
const popup = document.getElementById('footer-popup');
const popupClose = document.getElementById('footer-popup-close');
if (mailBtn && popup && popupClose) {
mailBtn.addEventListener('click', () => popup.style.display = 'flex');
popupClose.addEventListener('click', () => popup.style.display = 'none');
popup.addEventListener('click', (e) => { if (e.target === popup) popup.style.display = 'none'; });
}
const cookieBanner = document.getElementById('cookie-banner');
const cookieAccept = document.getElementById('cookie-accept');
if (cookieBanner && cookieAccept) {
if (localStorage.getItem('cookieAccepted')) {
cookieBanner.style.display = 'none';
}
cookieAccept.addEventListener('click', function() {
localStorage.setItem('cookieAccepted', '1');
cookieBanner.style.display = 'none';
});
}
document.querySelectorAll('[data-product]').forEach(function(button) {
button.addEventListener('click', function() {
document.querySelector('.cart-popup__wrapper').classList.remove('cart-popup__wrapper--hidden');
document.getElementById('fast_product').value = button.getAttribute('data-product');
});
});
</script>
<div class="cart-popup__wrapper cart-popup__wrapper--hidden">
@ -336,5 +426,6 @@
</div>
</div>
</body>
</html>

@ -5,6 +5,7 @@
$curPage = $APPLICATION->GetCurPage(false);
$assets = Asset::getInstance();
$body_class = [];
global $serv;
if ($curPage == '/') {
$body_class[] = 'page-index';
@ -12,6 +13,9 @@
if ($curPage == '/cart/') {
$body_class[] = 'cart';
}
if ($serv){
$body_class[] = 'services-page';
}
?>
<!DOCTYPE html>
@ -36,13 +40,14 @@
Asset::getInstance()->addCss(DEFAULT_TEMPLATE_PATH . '/css/custom.css');
$APPLICATION->ShowHead();
?>
</head>
<div class="cart-toast-container"></div>
<body class="<?= implode(' ', $body_class) ?>">
<div id="panel">
<?php $APPLICATION->ShowPanel(); ?>
</div>
<?php if ($curPage === '/'): ?>
<?php if ($curPage === '/' || $serv): ?>
<div class="index-lead" style="background-image: linear-gradient(79.3deg, #557b3080 38.69%, #c9d6ba80 89.73%), url('<?= DEFAULT_TEMPLATE_PATH ?>/img/png/background-header.png');">
<?php endif; ?>
<div class="overflow js-overflow"></div>
@ -99,29 +104,21 @@
></path>
</svg>
</button>
<button class="button button--green button--outline">Расчет септика</button>
<?$APPLICATION->IncludeComponent("bitrix:search.title", "main", Array(
"CATEGORY_0" => array( // Ограничение области поиска
0 => "iblock_catalog",
),
"CATEGORY_0_TITLE" => "", // Название категории
"CATEGORY_0_iblock_catalog" => array( // Искать в информационных блоках типа "iblock_catalog"
0 => "4",
),
"CHECK_DATES" => "N", // Искать только в активных по дате документах
"CONTAINER_ID" => "title-search", // ID контейнера, по ширине которого будут выводиться результаты
"INPUT_ID" => "title-search-input", // ID строки ввода поискового запроса
"NUM_CATEGORIES" => "1", // Количество категорий поиска
"ORDER" => "date", // Сортировка результатов
"PAGE" => "", // Страница выдачи результатов поиска (доступен макрос #SITE_DIR#)
"SHOW_INPUT" => "Y", // Показывать форму ввода поискового запроса
"SHOW_OTHERS" => "N", // Показывать категорию "прочее"
"TOP_COUNT" => "50", // Количество результатов в каждой категории
"USE_LANGUAGE_GUESS" => "Y", // Включить автоопределение раскладки клавиатуры
"COMPONENT_TEMPLATE" => ".default"
),
false
);?>
<button class="button button--green button--outline" onclick="window.location.href='/raschet-septika/'">Расчет септика</button>
<form id="header-search-form" action="#" autocomplete="off">
<div class="header__search">
<input type="text" class="input" id="header-search-input" placeholder="Поиск" />
<div class="header__search-block" id="header-search-history-block">
<div class="header__search-top" id="header-search-top">
История поиска
<button class="button button--ghost" id="header-search-clear" type="button">Очистить</button>
</div>
<div class="header__search-histories" id="header-search-histories">
<!-- История будет подгружаться через JS -->
</div>
</div>
</div>
</form>
<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
@ -154,14 +151,14 @@
</div>
<div class="catalog-overflow js-overflow"></div>
<div class="catalog">
<div class="catalog__top">
<!-- <div class="catalog__top">
<div class="catalog__top-name">Каталог</div>
<button class="catalog__top-btn button button--green button--outline js-close-catalog">
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 6L14.4853 14.4853M6 14.4853L14.4853 6.00001" stroke="#3D3D3D" stroke-width="1.67" stroke-linecap="round"></path>
</svg>
</button>
</div>
</div> -->
<div class="catalog__list">
<?$APPLICATION->IncludeComponent(
"bitrix:menu",
@ -198,66 +195,16 @@
)
);?>
<button class="button button--green button--outline">Расчет септика</button>
<form action="#">
<form id="mobile-search-form" action="#" autocomplete="off">
<div class="menu-mobile__search">
<input type="text" class="input" placeholder="Поиск" />
<div class="header__search-block">
<div class="header__search-top">
<input type="text" class="input" id="mobile-search-input" placeholder="Поиск" />
<div class="header__search-block" id="mobile-search-history-block">
<div class="header__search-top" id="mobile-search-top">
История поиска
<button class="button button--ghost" type="button">Очистить</button>
</div>
<div class="header__search-histories">
<div class="header__search-history">
<button class="header__search-btn header__search-btn--again">
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
d="M17.5 10a7.5 7.5 0 0 1-7.4 7.5H10a7.452 7.452 0 0 1-5.148-2.047.626.626 0 0 1 .859-.909 6.25 6.25 0 1 0-.15-8.947L3.483 7.5h2.141a.625.625 0 0 1 0 1.25h-3.75a.625.625 0 0 1-.625-.625v-3.75a.625.625 0 0 1 1.25 0v2.328l2.207-2.016A7.5 7.5 0 0 1 17.5 10Z"
fill="currentColor"
></path>
<path d="M14.254 10.155a.625.625 0 0 0-.442-.183H10.57v-3.75a.625.625 0 0 0-1.25 0v4.375a.625.625 0 0 0 .625.625h3.868a.625.625 0 0 0 .442-1.067Z" fill="currentColor"></path>
</svg>
<span>ЭРА 6 midi прин</span>
</button>
<button class="header__search-btn header__search-btn--remove">
<svg width="20" height="21" viewBox="0 0 20 21" xmlns="http://www.w3.org/2000/svg">
<path d="m6 6.5 8.485 8.485m-8.485 0L14.485 6.5" stroke="currentColor" stroke-width="1.67" stroke-linecap="round"></path>
</svg>
</button>
</div>
<div class="header__search-history">
<button class="header__search-btn header__search-btn--again">
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
d="M17.5 10a7.5 7.5 0 0 1-7.4 7.5H10a7.452 7.452 0 0 1-5.148-2.047.626.626 0 0 1 .859-.909 6.25 6.25 0 1 0-.15-8.947L3.483 7.5h2.141a.625.625 0 0 1 0 1.25h-3.75a.625.625 0 0 1-.625-.625v-3.75a.625.625 0 0 1 1.25 0v2.328l2.207-2.016A7.5 7.5 0 0 1 17.5 10Z"
fill="currentColor"
></path>
<path d="M14.254 10.155a.625.625 0 0 0-.442-.183H10.57v-3.75a.625.625 0 0 0-1.25 0v4.375a.625.625 0 0 0 .625.625h3.868a.625.625 0 0 0 .442-1.067Z" fill="currentColor"></path>
</svg>
<span>ЭРА 8 long прин</span>
</button>
<button class="header__search-btn header__search-btn--remove">
<svg width="20" height="21" viewBox="0 0 20 21" xmlns="http://www.w3.org/2000/svg">
<path d="m6 6.5 8.485 8.485m-8.485 0L14.485 6.5" stroke="currentColor" stroke-width="1.67" stroke-linecap="round"></path>
</svg>
</button>
</div>
<div class="header__search-history">
<button class="header__search-btn header__search-btn--again">
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path
d="M17.5 10a7.5 7.5 0 0 1-7.4 7.5H10a7.452 7.452 0 0 1-5.148-2.047.626.626 0 0 1 .859-.909 6.25 6.25 0 1 0-.15-8.947L3.483 7.5h2.141a.625.625 0 0 1 0 1.25h-3.75a.625.625 0 0 1-.625-.625v-3.75a.625.625 0 0 1 1.25 0v2.328l2.207-2.016A7.5 7.5 0 0 1 17.5 10Z"
fill="currentColor"
></path>
<path d="M14.254 10.155a.625.625 0 0 0-.442-.183H10.57v-3.75a.625.625 0 0 0-1.25 0v4.375a.625.625 0 0 0 .625.625h3.868a.625.625 0 0 0 .442-1.067Z" fill="currentColor"></path>
</svg>
<span>Жироуловитель ЭРА 4</span>
</button>
<button class="header__search-btn header__search-btn--remove">
<svg width="20" height="21" viewBox="0 0 20 21" xmlns="http://www.w3.org/2000/svg">
<path d="m6 6.5 8.485 8.485m-8.485 0L14.485 6.5" stroke="currentColor" stroke-width="1.67" stroke-linecap="round"></path>
</svg>
</button>
<button class="button button--ghost" id="mobile-search-clear" type="button">Очистить</button>
</div>
<div class="header__search-histories" id="mobile-search-histories">
<!-- История будет подгружаться через JS -->
</div>
</div>
</div>
@ -279,6 +226,12 @@
<footer class="footer footer section">
<div class="container">
<div class="footer__top">
<div class="footer__top-item">
<a href="/tseny/" class="footer__btn">
Цены
</a>
</div>
<?$APPLICATION->IncludeComponent("bitrix:menu", "footer_menu", Array(
"ALLOW_MULTI_SELECT" => "N",
"CHILD_MENU_TYPE" => "",
@ -330,6 +283,8 @@
),
false
);?>
<div class="footer-items">
<?$APPLICATION->IncludeComponent("bitrix:menu", "footer_menu", Array(
"ALLOW_MULTI_SELECT" => "N",
@ -365,6 +320,17 @@
),
false
);?>
<div class="footer__top-item">
<a href="/contacts/" class="footer__btn">
Контакты
</a>
</div>
<div class="footer__top-item">
<a href="/about/" class="footer__btn">
О компании
</a>
</div>
</div>
</div>
<div class="footer__bottom">
@ -419,11 +385,12 @@
"PATH" => "/include/footer-social.php"
)
);?>
</div>
</div>
</footer>
</div>
<?php if ($curPage === '/'): ?>
<?php if ($curPage === '/' ): ?>
<?$APPLICATION->IncludeComponent(
"bitrix:news.detail",
"header_lead",
@ -496,3 +463,4 @@
</div>
<?php endif; ?>
<main class="content" id="content">
<script src="/local/templates/EraSeptik/js/search-history.js"></script>

Loading…
Cancel
Save