Находим товар по 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>';
}
?> |