Abr@X@bra.ru
Highload выводим цвета из торговых предложений
Highload выводим цвета из торговых предложений

Highload выводим цвета из торговых предложений

17.07.2016
647

И так приступим к делу. Значит перед нами стоит следущая задача, есть какой-то товар и у него есть торговые предложения, разных вариации цветов. За пример давай возьмем, допустим, майка мужская и у ней есть три цвета, белая, красная и синея. В карточки нашого товара нам нужно показать все эти цвета, чтобы наш будущий клиент, который решил купить у нас эту майку, так же мог еще выбрать ее по цвету.

Создаем инфоблок

Идем в админку Битрикс, далее выкладка Контент, Highload и в нем жмем добавить.

После того как мы создали наш инфоблок, нам нужно настроить для него поля, жмем Добавить запись и ниже Добавить пользовательское поле. Давай теперь сделаем поле, где мы сможем ввести имя нашего цвета, после того как мы нажали на Добавить пользовательское поле нас должно перекинуть в Настройки, Пользовательские поля. Где нам нужно выбрать в первом пункте Строка.


Жмем сохранить, дальше все тоже самое, создаем новое поле, выбираем тип Файл, так как цвета товара это просто разноцветные картинки, которые нам нужно будит добавить. Возвращаемся в наш созданный Highload, где должно получится следующие:

Загружаем цвета в инфоблок.


Дальше нам нужно перейти в настройки инфоблока Каталог и создать там новое свойство Цвет тип свойства Справочники. Переходим в настройки данного свойства и выбираем наш созданный ранее Highload.


И жмем сохранить. Дальше нам нужно зайти в настройки компонента Каталог в визуальной части сайта и выбрать наше свойство Цвет.


Выводим свойство "Цвет" из Higload

И так подготовительные работы прошли, теперь нам нужно все это дело вывести на сайт, визуальную его часть. Так как мы в начале поста решили, что цвета мы будим выводить в карточке товара и изначально за основу я использовал комплексный компонент Каталог, соответственно данный компонент будит лежать в папке комплексного компонента Catalog, Catalog.element. в данной папке нам нужен файл который отвечает за вывод визуальной части template.php, открываем его на редактирование.

Мы прекрасно понимаем, что товаров будет много и цвета у каждого конкретного товара могут отличаться. По этому нам нужно выводить конкретные цвета для конкретного товара, а не все подряд.

Создадим цикл foreach по всем нашим торг.предложений для данного товара и результат сохраним в переменную. Говоря простым языком, соберем все торг. предложения в одну строку, чтобы было дальше удобней работать.

<?
foreach($arElement["OFFERS"] as $arOffer):
   foreach($arOffer["DISPLAY_PROPERTIES"] as $pid=>$arProperty):
      $color .= '\''.$arProperty["DISPLAY_VALUE"].'\',';
   break;endforeach;
endforeach;
?>

Дальше когда мы все записали в переменную $color, нам нужно для нее создать массив - воспользуемся eval.

<?
   eval('$fofilter=array('.$color.');');
   extract($fofilter);
?>

Наш массив готов и он занесен в переменную $fofilter. Теперь подключим наш Higload и заберем наши картинки с цветами, через API CFile::GetPath.

<?
   if (!CModule::IncludeModule('highloadblock')) //ПОДКЛЮЧАЕМ МОДУЛЬ
      continue;
   $ID = 3; //СЮДА ID ВАШЕГО HL ИНФОБЛОКА
   $hldata = Bitrix\Highloadblock\HighloadBlockTable::getById($ID)->fetch();
   $hlentity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hldata);
   $hlDataClass = $hldata['NAME'].'Table';
      
   //СОЗДАЕМ МАССИВ ФИЛЬТРА, В НЕМ УКАЗЫВАЕМ ЛОГИКУ ОТБОРА И (обязательно, иначе будет ИЛИ и отфильтрует только один цвет)
   $arFilter = Array(
         Array(
            "LOGIC"=>"AND",
            Array(
               "UF_NAME"=> $fofilter //НАШ МАССИВ С ЦВЕТАМИ
            )
         )
      );
   $result = $hlDataClass::getList(array(
      'select' => array('UF_FILE','UF_NAME'), //НАМ НУЖНЫ ТОЛЬКО НАЗВАНИЕ И КАРТИНКА
      'order' => array('UF_NAME' =>'ASC'),
      'filter' => $arFilter //ПРИМЕНЯМ СОЗДАННЫЙ ВЫШЕ ФИЛЬТР
   ));
   while($res = $result->fetch())
   {
      $img_path = CFile::GetPath($res["UF_FILE"]); //ПОЛУЧАЕМ ПУСТЬ К КАРТИНКЕ
      echo '<img src="'.$img_path.'"/>'; //ВЫВОДИМ КАРТИНКУ
   }
?>

На этом все, если у нашего товара есть только один цвет, только он и будит выводиться, соответственно если цветов будит несколько они так же появятся. Метод давольно запутанный, но рабочий. Причем не дает сильной нагрузки на сайт и работает давольно быстро.

Если вдруг у тебя есть вопросы по данному методу, ты всегда их можешь задать в форме комментариев.



Highload, PHP, Bitrix
Читайте также:
Смена mysql root пароля на bitrix-env

Смена mysql root пароля на bitrix-env

Не знаю почему, но root пароль от mysql на bitrix-env любой версии по дефолту пустой. И изменить его не предлагают при первой...
Читать
Сортировка торговых предложений по цене Bitrix

Сортировка торговых предложений по цене Bitrix

Привет мой юный друг) В данном посте хочу с тобой поделиться и разложить по полочкам весь процесс, как средствами Битрикс...

Читать
Разработка → React в браузерах и на мобильных платформах

Разработка → React в браузерах и на мобильных платформах

За последние несколько лет индустрия создания программного обеспечения развивается просто безумными темпами. И особенно ...
Читать