Битрикс. Надо отредактировать этот код, чтобы выводить в виде массива
500 руб. за проект
Надо отредактировать этот код (и код который в шаблоне компонента) так, чтобы вот это свойство принималось и выводилось в виде массива
$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;
}
}
?>
$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;
}
}
?>
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.