ru24.pro
Работа
Сентябрь
2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19
20
21
22
23
24
25
26
27
28
29
30

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

0
Надо отредактировать этот код (и код который в шаблоне компонента) так, чтобы вот это свойство принималось и выводилось в виде массива

$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;
    }
}
?>