Вывод товаров из разных инфоблоков по ID в 1С-Битрикс

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Вывод товаров из разных инфоблоков по ID в 1С-Битрикс
Как вывести информацию о товаре из нескольких инфоблоков по ID: практическое решение на 1С-Битрикс

В работе интернет-магазина нередко возникает ситуация, когда карточки  товаров распределены по разным инфоблокам (например, «Одежда», «Обувь»,  «Аксессуары»). При этом на витрину попадает только один параметр — ID товара.  Ниже вы найдёте готовый PHP-код, который ищет элемент сразу в трёх  инфоблоках, а затем выводит всю информацию о нём и его свойствах. Сразу  после кода подробно разберём, что здесь происходит, и какие есть  варианты улучшений.
Изменено: Валерий Макеев - 29.09.2025 14:34:17
Находим товар по ID в одном из нескольких инфоблоков с использованием D7-ORM и кеширования, затем выводим его название, изображение и описание.
Код
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php');

use Bitrix\Main\Data\Cache;
use Bitrix\Iblock\ElementTable;
use Bitrix\Main\Loader;

Loader::includeModule('iblock');

$code = (int)($_REQUEST['CODE'] ?? 0);
if ($code <= 0) {
    die('Неверный ID');
}

$cache = Cache::createInstance();
$cacheTime = 3600;
$cacheId = 'product_multi_iblock_' . $code;
$cachePath = '/multi-iblock-product';

if ($cache->initCache($cacheTime, $cacheId, $cachePath)) {
    $productData = $cache->getVars();
} elseif ($cache->startDataCache()) {
    $iblockIds = [7, 10, 5];
    $productData = null;

    foreach ($iblockIds as $iblockId) {
        $element = ElementTable::getList([
            'select' => [
                'ID',
                'IBLOCK_ID',
                'NAME',
                'DETAIL_TEXT',
                'DETAIL_PICTURE',
                'ACTIVE_FROM',
            ],
            'filter' => [
                '=ID' => $code,
                '=IBLOCK_ID' => $iblockId,
                '=ACTIVE' => 'Y'
            ],
            'limit' => 1
        ])->fetch();

        if ($element) {
            $productData = $element;
            $propertyRes = \CIBlockElement::GetProperty($iblockId, $code, ['sort' => 'asc'], ['!CODE' => '']);
            while ($prop = $propertyRes->Fetch()) {
                $key = $prop['CODE'];
                if ($prop['MULTIPLE'] === 'Y') {
                    $productData['PROPERTIES'][$key][] = $prop['VALUE'];
                } else {
                    $productData['PROPERTIES'][$key] = $prop['VALUE'];
                }
            }
            break;
        }
    }

    if (!$productData) {
        $cache->abortDataCache();
        die('Товар не найден');
    }

    $cache->endDataCache($productData);
}

// Вывод
echo '<h1>' . htmlspecialcharsbx($productData['NAME']) . '</h1>';
if ($productData['DETAIL_PICTURE']) {
    $img = CFile::GetPath($productData['DETAIL_PICTURE']);
    echo '<img src="' . $img . '" alt="" style="max-width:300px;">';
}
echo '<p>' . $productData['DETAIL_TEXT'] . '</p>';
if (!empty($productData['ACTIVE_FROM'])) {
    echo '<p><small>Дата начала: ' . $productData['ACTIVE_FROM']->toString() . '</small></p>';
}
?>
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.