89 $res = parent::Fetch();
91 if(!isset($this) || !is_object($this))
97 if(!empty($this->arIBlockLongProps) && is_array($this->arIBlockLongProps))
101 if(preg_match(
"#^ALIAS_(\\d+)_(.*)$#",
$k, $match))
103 $res[$this->arIBlockLongProps[$match[1]].$match[2]] = $v;
110 isset(
$res[
"IBLOCK_ID"])
111 &&
$res[
"IBLOCK_ID"] != $this->_LAST_IBLOCK_ID
112 && defined(
"BX_COMP_MANAGED_CACHE")
115 CIBlock::registerWithTagCache(
$res[
"IBLOCK_ID"]);
116 $this->_LAST_IBLOCK_ID =
$res[
"IBLOCK_ID"];
119 if(isset(
$res[
"ID"]) &&
$res[
"ID"] !=
"" && !empty($this->arIBlockMultProps) && is_array($this->arIBlockMultProps))
121 foreach($this->arIBlockMultProps as $field_name => $db_prop)
123 if(array_key_exists($field_name,
$res))
125 if(is_object(
$res[$field_name]))
126 $res[$field_name]=
$res[$field_name]->load();
128 if(preg_match(
"/(_VALUE)$/", $field_name))
130 $descr_name = preg_replace(
"/(_VALUE)$/",
"_DESCRIPTION", $field_name);
131 $value_id_name = preg_replace(
"/(_VALUE)$/",
"_PROPERTY_VALUE_ID", $field_name);;
135 $descr_name = preg_replace(
"/^(PROPERTY_)/",
"DESCRIPTION_", $field_name);
136 $value_id_name = preg_replace(
"/^(PROPERTY_)/",
"PROPERTY_VALUE_ID_", $field_name);
140 if (
$res[$field_name] ==
'')
146 $tmp = unserialize(
$res[$field_name], [
'allowed_classes' =>
false]);
147 if (!isset(
$tmp[
'ID']))
153 SELECT ID, VALUE, DESCRIPTION
154 FROM b_iblock_element_prop_m".$db_prop[
"IBLOCK_ID"].
"
156 IBLOCK_ELEMENT_ID = ".intval(
$res[
"ID"]).
"
157 AND IBLOCK_PROPERTY_ID = ".intval($db_prop[
"ORIG_ID"]).
"
160 $rs =
$DB->Query($strSql);
166 $res[$field_name][]=
$ar[
"VALUE"];
167 $res[$descr_name][]=
$ar[
"DESCRIPTION"];
168 $res[$value_id_name][] =
$ar[
'ID'];
170 $arUpdate[
"b_iblock_element_prop_s".$db_prop[
"IBLOCK_ID"]][
"PROPERTY_".$db_prop[
"ORIG_ID"]] = serialize(
array(
"VALUE"=>
$res[$field_name],
"DESCRIPTION"=>
$res[$descr_name],
"ID"=>
$res[$value_id_name]));
175 $res[$descr_name] =
$tmp[
"DESCRIPTION"];
179 if(is_array(
$res[$field_name]) && $db_prop[
"PROPERTY_TYPE"]==
"L")
186 $arTemp[
$val] = $arEnum[
"VALUE"];
188 $res[$field_name] = $arTemp;
193 if (!empty($arUpdate))
196 $pool->useMasterOnly(
true);
197 foreach ($arUpdate as $strTable =>
$arFields)
200 if ($strUpdate !=
"")
202 $strSql =
"UPDATE ".$strTable.
" SET ".$strUpdate.
" WHERE IBLOCK_ELEMENT_ID = ".intval(
$res[
"ID"]);
206 $pool->useMasterOnly(
false);
210 if(!empty($this->arIBlockConvProps) && is_array($this->arIBlockConvProps))
212 foreach($this->arIBlockConvProps as $strFieldName=>$arCallback)
214 if(is_array(
$res[$strFieldName]))
216 foreach(
$res[$strFieldName] as
$key=>$value)
218 $arValue = call_user_func_array(
219 $arCallback[
'ConvertFromDB'],
221 $arCallback[
'PROPERTY'],
228 $res[$strFieldName][
$key] = $arValue[
'VALUE'] ??
null;
233 $arValue = call_user_func_array(
234 $arCallback[
'ConvertFromDB'],
236 $arCallback[
'PROPERTY'],
238 'VALUE' =>
$res[$strFieldName],
243 $res[$strFieldName] = $arValue[
'VALUE'] ??
null;
247 if(!empty($this->arIBlockNumProps) && is_array($this->arIBlockNumProps))
249 foreach($this->arIBlockNumProps as $field_name => $db_prop)
251 if(
$res[$field_name] <>
'')
252 $res[$field_name] = htmlspecialcharsex(CIBlock::NumberFormat(
$res[$field_name]));
255 if (isset(
$res[
"UC_ID"]))
257 $res[
"CREATED_BY_FORMATTED"] = CUser::FormatName($this->nameTemplate,
array(
258 "NAME" =>
$res[
"UC_NAME"],
259 "LAST_NAME" =>
$res[
"UC_LAST_NAME"],
260 "SECOND_NAME" =>
$res[
"UC_SECOND_NAME"],
261 "EMAIL" =>
$res[
"UC_EMAIL"],
262 "ID" =>
$res[
"UC_ID"],
263 "LOGIN" =>
$res[
"UC_LOGIN"],
265 unset(
$res[
"UC_NAME"]);
266 unset(
$res[
"UC_LAST_NAME"]);
267 unset(
$res[
"UC_SECOND_NAME"]);
268 unset(
$res[
"UC_EMAIL"]);
269 unset(
$res[
"UC_ID"]);
270 unset(
$res[
"UC_LOGIN"]);
275 defined(
"BX_COMP_MANAGED_CACHE")
276 && $this->_LAST_IBLOCK_ID ==
""
277 &&
count($this->_FILTER_IBLOCK_ID)
280 foreach($this->_FILTER_IBLOCK_ID as $iblock_id => $t)
281 CIBlock::registerWithTagCache($iblock_id);
287 function GetNext($bTextHtmlAuto=
true, $use_tilda=
true)
289 static $arSectionPathCache =
array();
291 $res = parent::GetNext($bTextHtmlAuto, $use_tilda);
295 if($this->strListUrl)
297 elseif(array_key_exists(
"~LIST_PAGE_URL",
$res))
298 $TEMPLATE =
$res[
"~LIST_PAGE_URL"];
299 elseif(!$use_tilda && array_key_exists(
"LIST_PAGE_URL",
$res))
300 $TEMPLATE =
$res[
"LIST_PAGE_URL"];
307 if((intval((
$res[
"IBLOCK_ID"] ?? 0)) <= 0) && (intval(
$res[
"ID"]) > 0))
309 $res_tmp[
"IBLOCK_ID"] =
$res[
"ID"];
310 $res_tmp[
"IBLOCK_CODE"] =
$res[
"CODE"];
311 $res_tmp[
"IBLOCK_EXTERNAL_ID"] =
$res[
"EXTERNAL_ID"];
314 $res_tmp[
"~IBLOCK_ID"] =
$res[
"~ID"];
315 $res_tmp[
"~IBLOCK_CODE"] =
$res[
"~CODE"];
316 $res_tmp[
"~IBLOCK_EXTERNAL_ID"] =
$res[
"~EXTERNAL_ID"];
322 $res[
"~LIST_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE, $res_tmp,
true,
false);
327 $res[
"LIST_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE, $res_tmp,
true,
false);
332 if((
$res[
"IBLOCK_ID"] ??
'') <>
'')
335 if(array_key_exists(
"GLOBAL_ACTIVE",
$res))
344 if($this->strDetailUrl)
348 elseif(array_key_exists(
"~DETAIL_PAGE_URL",
$res))
350 $TEMPLATE =
$res[
"~DETAIL_PAGE_URL"];
352 elseif(!$use_tilda && array_key_exists(
"DETAIL_PAGE_URL",
$res))
354 $TEMPLATE =
$res[
"DETAIL_PAGE_URL"];
363 if($this->arSectionContext)
365 $TEMPLATE = str_replace(
"#SECTION_ID#", $this->arSectionContext[
"ID"], $TEMPLATE);
366 $TEMPLATE = str_replace(
"#SECTION_CODE#", $this->arSectionContext[
"CODE"], $TEMPLATE);
368 $this->arSectionContext[
"ID"] > 0
369 && $this->arSectionContext[
"IBLOCK_ID"] > 0
370 && mb_strpos($TEMPLATE,
"#SECTION_CODE_PATH#") !==
false
373 if(!isset($arSectionPathCache[$this->arSectionContext[
"ID"]]))
375 $rs = CIBlockSection::GetNavChain(
376 $this->arSectionContext[
"IBLOCK_ID"],
377 $this->arSectionContext[
"ID"],
378 array(
"ID",
"IBLOCK_SECTION_ID",
"CODE"),
383 $arSectionPathCache[$this->arSectionContext[
"ID"]] =
'';
386 $arSectionPathCache[$this->arSectionContext[
"ID"]] .= rawurlencode(
$a[
"CODE"]).
"/";
392 if(isset($arSectionPathCache[$this->arSectionContext[
"ID"]]))
394 $SECTION_CODE_PATH = rtrim($arSectionPathCache[$this->arSectionContext[
"ID"]],
"/");
398 $SECTION_CODE_PATH =
"";
400 $TEMPLATE = str_replace(
"#SECTION_CODE_PATH#", $SECTION_CODE_PATH, $TEMPLATE);
406 $res[
"~DETAIL_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE,
$res,
true,
$type);
411 $res[
"DETAIL_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE,
$res,
true,
$type);
415 if($this->strSectionUrl)
419 elseif(array_key_exists(
"~SECTION_PAGE_URL",
$res))
421 $TEMPLATE =
$res[
"~SECTION_PAGE_URL"];
423 elseif(!$use_tilda && array_key_exists(
"SECTION_PAGE_URL",
$res))
425 $TEMPLATE =
$res[
"SECTION_PAGE_URL"];
436 $res[
"~SECTION_PAGE_URL"] = CIBlock::ReplaceSectionUrl($TEMPLATE,
$res,
true,
$type);
441 $res[
"SECTION_PAGE_URL"] = CIBlock::ReplaceSectionUrl($TEMPLATE,
$res,
true,
$type);
446 if(array_key_exists(
"~CANONICAL_PAGE_URL",
$res))
447 $TEMPLATE =
$res[
"~CANONICAL_PAGE_URL"];
448 elseif(!$use_tilda && array_key_exists(
"CANONICAL_PAGE_URL",
$res))
449 $TEMPLATE =
$res[
"CANONICAL_PAGE_URL"];
457 $res[
"~CANONICAL_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE,
$res,
true,
"E");
462 $res[
"CANONICAL_PAGE_URL"] = CIBlock::ReplaceDetailUrl($TEMPLATE,
$res,
true,
"E");