Битрикс. Надо отредактировать этот код, чтобы выводить в виде массива

500 руб. за проект
12 сентября 2024, 18:56 • 2 отклика • 30 просмотров
Надо отредактировать этот код (и код который в шаблоне компонента) так, чтобы вот это свойство принималось и выводилось в виде массива

$this->imagePropertyCode = $this->getOptionAsArray('IMAGE_PROPERTY_CODE');

Сам код который нужно редактировать

<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

use Bitrix\Main\Loader;
use Bitrix\Main\Config\Option;

class AvagencyVideoProductComponent extends CBitrixComponent
{
private $videoPropertyCode;
private $imagePropertyCode;

public function __construct($component = null)
{
parent::__construct($component);

// Получаем коды свойств из настроек модуля и преобразуем в массив
$this->videoPropertyCode = $this->getOptionAsArray('VIDEO_PROPERTY_CODE');
$this->imagePropertyCode = $this->getOptionAsArray('IMAGE_PROPERTY_CODE');
}

private function getOptionAsArray($optionName)
{
$optionValue = Option::get('avagency.videoproduct', $optionName);

// Пробуем декодировать как JSON, если не получилось - используем explode
$array = json_decode($optionValue, true);
if (json_last_error() === JSON_ERROR_NONE && is_array($array)) {
return $array;
}

// Если это обычная строка с запятыми, то используем explode
return explode(',', $optionValue);
}

public function executeComponent()
{
if (!Loader::includeModule('iblock')) {
echo 'Модуль iblock не подключен';
return;
}

$productId = $this->arParams['PRODUCT_ID'];
if (!$productId) {
echo 'PRODUCT_ID не передан';
return;
}

foreach ($this->videoPropertyCode as $code) {
$this->arResult['DISPLAY_PROPERTIES'][$code] = $this->getProductVideo($productId, $code);
}

foreach ($this->imagePropertyCode as $code) {
$this->arResult['DISPLAY_PROPERTIES'][$code] = $this->getProductImages($productId, $code);
}

$this->includeComponentTemplate();
}

private function getProductVideo($productId, $videoPropertyCode)
{
$res = CIBlockElement::GetList(
[],
['ID' => $productId],
false,
false,
['ID', 'IBLOCK_ID', 'PROPERTY_' . $videoPropertyCode]
);

if ($element = $res->GetNext()) {
$videoFileIds = $element['PROPERTY_' . $videoPropertyCode . '_VALUE'];
if ($videoFileIds) {
return CFile::GetPath($videoFileIds);
}
}

return null;
}

private function getProductImages($productId, $imagePropertyCode)
{
$res = CIBlockElement::GetList(
[],
['ID' => $productId],
false,
false,
['ID', 'IBLOCK_ID', 'PROPERTY_' . $imagePropertyCode]
);

$images = [];
if ($element = $res->GetNext()) {
$imagesFileIds = $element['PROPERTY_' . $imagePropertyCode . '_VALUE'];
if (is_array($imagesFileIds)) {
foreach ($imagesFileIds as $fileId) {
$images[] = CFile::GetPath($fileId);
}
} elseif ($imagesFileIds) {
$images[] = CFile::GetPath($imagesFileIds);
}
}

return $images;
}
}
?>
Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Заказчик
Быстро, грамотно, профи!)
2 месяца назад
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
Всё замечательно, заказчик предоставил все необходимые данные, что помогло решить задачу без проблем, быстро и качественно.
2 месяца назад