6require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/sale/general/product.php");
29 $minCNT = (int)$minCNT;
33 $getParentOnly = ($getParentOnly ===
true);
36 $elementExclude =
array();
44 $skuInfo = CCatalogSKU::GetInfoByProductIBlock(
$intIBlockID);
47 $itemsIterator = CIBlockElement::GetList(
49 array(
'IBLOCK_ID' => $skuInfo[
'IBLOCK_ID'],
'PROPERTY_'.$skuInfo[
'SKU_PROPERTY_ID'] =>
$ID),
52 array(
'ID',
'IBLOCK_ID',
'PROPERTY_'.$skuInfo[
'SKU_PROPERTY_ID'])
54 while ($item = $itemsIterator->Fetch())
56 $item[
'ID'] = (int)$item[
'ID'];
57 $elementInclude[] = $item[
'ID'];
58 $elementExclude[] = $item[
'ID'];
65 $strSql =
"select PARENT_PRODUCT_ID from b_sale_product2product where PRODUCT_ID IN (".implode(
',', $elementInclude).
")";
66 if (!empty($elementExclude))
67 $strSql .=
" and PARENT_PRODUCT_ID not in (".implode(
',', $elementExclude).
")";
69 $strSql .=
" and CNT >= ".$minCNT;
70 $strSql .=
' group by PARENT_PRODUCT_ID';
72 $strSql .=
" limit ".$limit;
76 $strSql =
"select * from b_sale_product2product where PRODUCT_ID in (".implode(
',', $elementInclude).
")";
77 if (!empty($elementExclude))
78 $strSql .=
" and PARENT_PRODUCT_ID not in (".implode(
',', $elementExclude).
")";
80 $strSql .=
" and CNT >= ".$minCNT;
81 $strSql .=
" order by CNT desc, PRODUCT_ID asc";
83 $strSql .=
" limit ".$limit;
85 return $DB->Query($strSql);
108 $arJoin[] =
"LEFT JOIN b_sale_basket_props p".$i.
" ON (b.ID = p".
$i.
".BASKET_ID)";
116 "ID" =>
array(
"FIELD_NAME" =>
"O.ID",
"FIELD_TYPE" =>
"int"),
117 "LID" =>
array(
"FIELD_NAME" =>
"O.LID",
"FIELD_TYPE" =>
"string"),
118 "PERSON_TYPE_ID" =>
array(
"FIELD_NAME" =>
"O.PERSON_TYPE_ID",
"FIELD_TYPE" =>
"int"),
119 "PAYED" =>
array(
"FIELD_NAME" =>
"O.PAYED",
"FIELD_TYPE" =>
"string"),
120 "DATE_PAYED" =>
array(
"FIELD_NAME" =>
"O.DATE_PAYED",
"FIELD_TYPE" =>
"datetime"),
121 "EMP_PAYED_ID" =>
array(
"FIELD_NAME" =>
"O.EMP_PAYED_ID",
"FIELD_TYPE" =>
"int"),
122 "CANCELED" =>
array(
"FIELD_NAME" =>
"O.CANCELED",
"FIELD_TYPE" =>
"string"),
123 "DATE_CANCELED" =>
array(
"FIELD_NAME" =>
"O.DATE_CANCELED",
"FIELD_TYPE" =>
"datetime"),
124 "EMP_CANCELED_ID" =>
array(
"FIELD_NAME" =>
"O.EMP_CANCELED_ID",
"FIELD_TYPE" =>
"int"),
125 "REASON_CANCELED" =>
array(
"FIELD_NAME" =>
"O.REASON_CANCELED",
"FIELD_TYPE" =>
"string"),
126 "STATUS_ID" =>
array(
"FIELD_NAME" =>
"O.STATUS_ID",
"FIELD_TYPE" =>
"string"),
127 "DATE_STATUS" =>
array(
"FIELD_NAME" =>
"O.DATE_STATUS",
"FIELD_TYPE" =>
"datetime"),
128 "PAY_VOUCHER_NUM" =>
array(
"FIELD_NAME" =>
"O.PAY_VOUCHER_NUM",
"FIELD_TYPE" =>
"string"),
129 "PAY_VOUCHER_DATE" =>
array(
"FIELD_NAME" =>
"O.PAY_VOUCHER_DATE",
"FIELD_TYPE" =>
"date"),
130 "EMP_STATUS_ID" =>
array(
"FIELD_NAME" =>
"O.EMP_STATUS_ID",
"FIELD_TYPE" =>
"int"),
131 "PRICE_DELIVERY" =>
array(
"FIELD_NAME" =>
"O.PRICE_DELIVERY",
"FIELD_TYPE" =>
"double"),
132 "ALLOW_DELIVERY" =>
array(
"FIELD_NAME" =>
"O.ALLOW_DELIVERY",
"FIELD_TYPE" =>
"string"),
133 "DATE_ALLOW_DELIVERY" =>
array(
"FIELD_NAME" =>
"O.DATE_ALLOW_DELIVERY",
"FIELD_TYPE" =>
"datetime"),
134 "EMP_ALLOW_DELIVERY_ID" =>
array(
"FIELD_NAME" =>
"O.EMP_ALLOW_DELIVERY_ID",
"FIELD_TYPE" =>
"int"),
135 "PRICE" =>
array(
"FIELD_NAME" =>
"O.PRICE",
"FIELD_TYPE" =>
"double"),
136 "CURRENCY" =>
array(
"FIELD_NAME" =>
"O.CURRENCY",
"FIELD_TYPE" =>
"string"),
137 "DISCOUNT_VALUE" =>
array(
"FIELD_NAME" =>
"O.DISCOUNT_VALUE",
"FIELD_TYPE" =>
"double"),
138 "SUM_PAID" =>
array(
"FIELD_NAME" =>
"O.SUM_PAID",
"FIELD_TYPE" =>
"double"),
139 "USER_ID" =>
array(
"FIELD_NAME" =>
"O.USER_ID",
"FIELD_TYPE" =>
"int"),
140 "PAY_SYSTEM_ID" =>
array(
"FIELD_NAME" =>
"O.PAY_SYSTEM_ID",
"FIELD_TYPE" =>
"int"),
141 "DELIVERY_ID" =>
array(
"FIELD_NAME" =>
"O.DELIVERY_ID",
"FIELD_TYPE" =>
"string"),
142 "DATE_INSERT" =>
array(
"FIELD_NAME" =>
"O.DATE_INSERT",
"FIELD_TYPE" =>
"datetime"),
143 "DATE_INSERT_FORMAT" =>
array(
"FIELD_NAME" =>
"O.DATE_INSERT",
"FIELD_TYPE" =>
"datetime"),
144 "DATE_UPDATE" =>
array(
"FIELD_NAME" =>
"O.DATE_UPDATE",
"FIELD_TYPE" =>
"datetime"),
145 "USER_DESCRIPTION" =>
array(
"FIELD_NAME" =>
"O.USER_DESCRIPTION",
"FIELD_TYPE" =>
"string"),
146 "ADDITIONAL_INFO" =>
array(
"FIELD_NAME" =>
"O.ADDITIONAL_INFO",
"FIELD_TYPE" =>
"string"),
147 "PS_STATUS" =>
array(
"FIELD_NAME" =>
"O.PS_STATUS",
"FIELD_TYPE" =>
"string"),
148 "PS_STATUS_CODE" =>
array(
"FIELD_NAME" =>
"O.PS_STATUS_CODE",
"FIELD_TYPE" =>
"string"),
149 "PS_STATUS_DESCRIPTION" =>
array(
"FIELD_NAME" =>
"O.PS_STATUS_DESCRIPTION",
"FIELD_TYPE" =>
"string"),
150 "PS_STATUS_MESSAGE" =>
array(
"FIELD_NAME" =>
"O.PS_STATUS_MESSAGE",
"FIELD_TYPE" =>
"string"),
151 "PS_SUM" =>
array(
"FIELD_NAME" =>
"O.PS_SUM",
"FIELD_TYPE" =>
"double"),
152 "PS_CURRENCY" =>
array(
"FIELD_NAME" =>
"O.PS_CURRENCY",
"FIELD_TYPE" =>
"string"),
153 "PS_RESPONSE_DATE" =>
array(
"FIELD_NAME" =>
"O.PS_RESPONSE_DATE",
"FIELD_TYPE" =>
"datetime"),
154 "COMMENTS" =>
array(
"FIELD_NAME" =>
"O.COMMENTS",
"FIELD_TYPE" =>
"string"),
155 "TAX_VALUE" =>
array(
"FIELD_NAME" =>
"O.TAX_VALUE",
"FIELD_TYPE" =>
"double"),
156 "STAT_GID" =>
array(
"FIELD_NAME" =>
"O.STAT_GID",
"FIELD_TYPE" =>
"string"),
157 "RECURRING_ID" =>
array(
"FIELD_NAME" =>
"O.RECURRING_ID",
"FIELD_TYPE" =>
"int"),
158 "RECOUNT_FLAG" =>
array(
"FIELD_NAME" =>
"O.RECOUNT_FLAG",
"FIELD_TYPE" =>
"string"),
159 "AFFILIATE_ID" =>
array(
"FIELD_NAME" =>
"O.AFFILIATE_ID",
"FIELD_TYPE" =>
"int"),
160 "DELIVERY_DOC_NUM" =>
array(
"FIELD_NAME" =>
"O.DELIVERY_DOC_NUM",
"FIELD_TYPE" =>
"string"),
161 "DELIVERY_DOC_DATE" =>
array(
"FIELD_NAME" =>
"O.DELIVERY_DOC_DATE",
"FIELD_TYPE" =>
"date"),
163 "DEDUCTED" =>
array(
"FIELD_NAME" =>
"O.DEDUCTED",
"FIELD_TYPE" =>
"string"),
164 "DATE_DEDUCTED" =>
array(
"FIELD_NAME" =>
"O.DATE_DEDUCTED",
"FIELD_TYPE" =>
"datetime"),
166 if (!empty($arOrderFilter) && is_array($arOrderFilter))
171 $orderFilter = $sqlWhere->GetQueryEx($arOrderFilter, $arJ);
178 " . $helper->getIsNullFunction(
'b.CATALOG_XML_ID',
"''") .
" CATALOG_XML_ID,
180 SUM(b.PRICE*b.QUANTITY) as PRICE,
181 AVG(b.PRICE) as AVG_PRICE,
182 SUM(b.QUANTITY) as QUANTITY,
187 $strSql .=
" FROM b_sale_basket b \n";
189 foreach($arJoin as $v)
191 if ($orderFilter !=
'')
192 $strSql .=
"INNER JOIN b_sale_order O ON (b.ORDER_ID = O.ID) \n";
194 $strSql .=
"WHERE \n".
195 " b.ORDER_ID is not null \n";
197 foreach($arWhere as $v)
200 if ($orderFilter !=
'')
201 $strSql .=
" AND ".$orderFilter.
"\n";
203 $strSql .=
" GROUP BY b.PRODUCT_ID, b.NAME, " . $helper->getIsNullFunction(
'b.CATALOG_XML_ID',
"''") .
", b.PRODUCT_XML_ID, b.CURRENCY \n";
205 $strSql .=
" ORDER BY QUANTITY DESC\n";
207 $strSql .=
" ORDER BY PRICE DESC\n";
209 $limit = (int)$limit;
211 $strSql .=
"LIMIT ".$limit;
213 return $DB->Query($strSql);
226 foreach($value as
$val)
229 $field_val .=
"\"".$DB->ForSQL(
$val).
"\", ";
231 $field_val = mb_substr($field_val, 0, -2);
234 if (mb_substr(
$key, 0, 1) ==
"!")
236 $operation =
"NOT IN";
237 $field =
$DB->ForSQL(mb_substr(
$key, 1));
247 $field_val =
"\"".$DB->ForSQL($value).
"\"";
249 if (mb_substr(
$key, 0, 1) ==
"!")
252 $field =
$DB->ForSQL(mb_substr(
$key, 1));
258 $field =
$DB->ForSQL(mb_substr(
$key, 1));
263 $field =
$DB->ForSQL(mb_substr(
$key, 2));
268 $field =
$DB->ForSQL(mb_substr(
$key, 2));
273 $field =
$DB->ForSQL(mb_substr(
$key, 1));
278 $field =
$DB->ForSQL(mb_substr(
$key, 1));
286 return array(
"field" => $field,
"operation" => $operation,
"value" => $field_val);
306 foreach(
GetModuleEvents(
"sale",
"OnBeforeViewedAdd",
true) as $arEvent)
318 $arFields[
"CALLBACK_FUNC"] =
"CatalogViewedProductCallback";
322 $arFields[
"PRODUCT_PROVIDER_CLASS"] =
"CCatalogProductProvider";
331 if ((
string)\
Bitrix\
Main\
Config\Option::get(
'sale',
'viewed_capability') ==
'Y')
335 if ((
string)\
Bitrix\
Main\
Config\Option::get(
'catalog',
'enable_viewed_products') !==
'N')
353 $FUSER_ID = $arFuserItems[
"ID"];
359 $FUSER_ID = (int)$FUSER_ID;
369 array(
'ID',
'DATE_VISIT')
371 if (!$arItems =
$db_res->Fetch())
378 $arResultTmp = $productProvider::ViewProduct(
array(
394 if ($arResultTmp &&
count($arResultTmp) > 0)
400 $arInsert =
$DB->PrepareInsert(
"b_sale_viewed_product",
$arFields);
403 $rnd = mt_rand(0, 1000);
408 array(
"FUSER_ID" => $FUSER_ID),
409 array(
"COUNT" =>
"ID"),
413 $viewedCount = COption::GetOptionString(
"sale",
"viewed_count",
"100");
423 $sqlInsertNames = $arInsert[0];
424 if (strval(trim($sqlInsertNames)) !=
'')
426 $sqlInsertNames .=
', ';
429 $sqlInsertValues = $arInsert[1];
430 if (strval(trim($sqlInsertValues)) !=
'')
432 $sqlInsertValues .=
', ';
435 $strSql =
"INSERT INTO b_sale_viewed_product (".$sqlInsertNames.
" DATE_VISIT) VALUES(".$sqlInsertValues.
" ".
$DB->GetNowFunction().
")";
438 $ID = intval(
$DB->LastID());
443 $dateVisit = new \Bitrix\Main\Type\DateTime($arItems[
"DATE_VISIT"]);
444 $offset = $dateVisit->add(
'1 day')->getTimestamp();
445 if ($offset <= time())
448 $ID = (int)$arItems[
"ID"];
473 if (array_key_exists(
"DATE_FROM",
$arFilter))
478 if (array_key_exists(
"DATE_TO",
$arFilter))
484 if (!$arSelectFields ||
count($arSelectFields) <= 0 || in_array(
"*", $arSelectFields))
485 $arSelectFields =
array(
"ID",
"FUSER_ID",
"DATE_VISIT",
"PRODUCT_ID",
"MODULE",
"LID",
"NAME",
"DETAIL_PAGE_URL",
"CURRENCY",
"PRICE",
"NOTES",
"PREVIEW_PICTURE",
"DETAIL_PICTURE",
"CALLBACK_FUNC",
"PRODUCT_PROVIDER_CLASS");
487 if ((
string)\
Bitrix\
Main\
Config\Option::get(
'sale',
'viewed_capability') ==
'Y')
501 if(is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) >= 0)
503 $limit = intval($arNavStartParams[
"nTopCount"]);
506 $viewedIterator = \Bitrix\Catalog\CatalogViewedProductTable::getList(
514 "NAME" =>
"ELEMENT.NAME"
516 "order" =>
array(
"DATE_VISIT" =>
"DESC"),
522 while($row = $viewedIterator->fetch())
524 $row[
'MODULE'] =
"catalog";
525 $row[
'DATE_VISIT'] = $row[
'DATE_VISIT']->toString();
526 $viewed[$row[
'PRODUCT_ID']] = $row;
533 $ids = array_keys($viewed);
537 if (
$catalog[
'IBLOCK_TYPE_ID'] ==
"offers")
539 $elementIterator = CIBlockElement::getList(
544 array(
"ID",
"IBLOCK_ID",
"PROPERTY_" .
$catalog[
'SKU_PROPERTY_ID'])
547 while ($item = $elementIterator->fetch())
549 $propertyName =
"PROPERTY_" .
$catalog[
'SKU_PROPERTY_ID'] .
"_VALUE";
550 $parentId = $item[$propertyName];
551 if (!empty($parentId))
553 $newIds[$item[
'ID']] = $parentId;
557 $newIds[$item[
'ID']] = $item[
'ID'];
564 foreach ($ids as $id)
566 if (!isset($newIds[$id]))
577 if( in_array(
"DETAIL_PAGE_URL", $arSelectFields) ||
578 in_array(
"PREVIEW_PICTURE", $arSelectFields) ||
579 in_array(
"DETAIL_PICTURE", $arSelectFields))
582 $elementIterator = CIBlockElement::GetList(
array(),
$filter);
583 while ($elementObj = $elementIterator->GetNextElement())
585 $fields = $elementObj->GetFields();
586 $mapped[
$fields[
'ID']][
'PREVIEW_PICTURE'] =
$fields[
'PREVIEW_PICTURE'];
587 $mapped[
$fields[
'ID']][
'DETAIL_PICTURE'] =
$fields[
'DETAIL_PICTURE'];
591 foreach($newIds as $natural => $tr)
593 $viewed[$natural][
'PREVIEW_PICTURE'] = $mapped[$tr][
'DETAIL_PICTURE'];
594 $viewed[$natural][
'DETAIL_PICTURE'] = $mapped[$tr][
'PREVIEW_PICTURE'];
595 $viewed[$natural][
'PRODUCT_ID'] = $tr;
598 if(in_array(
"CURRENCY", $arSelectFields) || in_array(
"PRICE", $arSelectFields))
601 $priceIterator = CPrice::getList(
array(),
array(
"PRODUCT_ID" => $ids),
false,
false,
array(
"PRODUCT_ID",
"PRICE",
"CURRENCY"));
602 while($price = $priceIterator->fetch())
604 if(!isset($viewed[$price[
'PRODUCT_ID']][
'PRICE']))
606 $viewed[$price[
'PRODUCT_ID']][
'PRICE'] = $price[
'PRICE'];
607 $viewed[$price[
'PRODUCT_ID']][
'CURRENCY'] = $price[
'CURRENCY'];
615 $dbresult->InitFromArray(array_values($viewed));
622 "ID" =>
array(
"FIELD" =>
"V.ID",
"TYPE" =>
"int"),
623 "FUSER_ID" =>
array(
"FIELD" =>
"V.FUSER_ID",
"TYPE" =>
"int"),
624 "DATE_VISIT" =>
array(
"FIELD" =>
"V.DATE_VISIT",
"TYPE" =>
"datetime"),
625 "PRODUCT_ID" =>
array(
"FIELD" =>
"V.PRODUCT_ID",
"TYPE" =>
"int"),
626 "MODULE" =>
array(
"FIELD" =>
"V.MODULE",
"TYPE" =>
"string"),
627 "LID" =>
array(
"FIELD" =>
"V.LID",
"TYPE" =>
"string"),
628 "NAME" =>
array(
"FIELD" =>
"V.NAME",
"TYPE" =>
"string"),
629 "DETAIL_PAGE_URL" =>
array(
"FIELD" =>
"V.DETAIL_PAGE_URL",
"TYPE" =>
"string"),
630 "CURRENCY" =>
array(
"FIELD" =>
"V.CURRENCY",
"TYPE" =>
"string"),
631 "PRICE" =>
array(
"FIELD" =>
"V.PRICE",
"TYPE" =>
"double"),
632 "NOTES" =>
array(
"FIELD" =>
"V.NOTES",
"TYPE" =>
"string"),
633 "PREVIEW_PICTURE" =>
array(
"FIELD" =>
"V.PREVIEW_PICTURE",
"TYPE" =>
"string"),
634 "DETAIL_PICTURE" =>
array(
"FIELD" =>
"V.DETAIL_PICTURE",
"TYPE" =>
"string"),
635 "CALLBACK_FUNC" =>
array(
"FIELD" =>
"V.CALLBACK_FUNC",
"TYPE" =>
"string"),
636 "PRODUCT_PROVIDER_CLASS" =>
array(
"FIELD" =>
"V.PRODUCT_PROVIDER_CLASS",
"TYPE" =>
"string")
641 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
643 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_sale_viewed_product V ";
644 if ($arSqls[
"WHERE"] <>
'')
645 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
646 if ($arSqls[
"GROUPBY"] <>
'')
647 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
648 if ($arSqls[
"ORDERBY"] <>
'')
649 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
651 if (is_array($arGroupBy) &&
count($arGroupBy) == 0)
660 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) <= 0 )
662 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_sale_viewed_product B ";
663 if ($arSqls[
"WHERE"] <>
'')
664 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
665 if ($arSqls[
"GROUPBY"] <>
'')
666 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
670 if ($arSqls[
"GROUPBY"] ==
'')
677 $cnt =
$dbRes->SelectedRowsCount();
681 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
685 $strSql =
$DB->TopSql($strSql, $arNavStartParams[
"nTopCount"]);
704 $viewed_time = COption::GetOptionString(
"sale",
"viewed_time",
"90");
705 $viewed_time = intval($viewed_time);
709 "FROM b_sale_viewed_product ".
710 "WHERE DATE_VISIT < " . $helper->addDaysToDateTime(-$viewed_time);
727 $FUSER_ID = (int)$FUSER_ID;
731 foreach(
GetModuleEvents(
"sale",
"OnBeforeViewedDelete",
true) as $arEvent)
737 $strSqlLimit =
" ORDER BY DATE_VISIT DESC LIMIT ".(int)
$LIMIT;
739 $DB->Query(
"DELETE FROM b_sale_viewed_product WHERE FUSER_ID = '".$FUSER_ID.
"' ".$strSqlLimit,
true);
while($arIBlock=$rsIBlocks->Fetch()) $catalogIterator
static refresh($productId, $fuserId, $siteId=SITE_ID, $elementId=0, $recommendationId='')
static getConnection($name="")
static includeModule($moduleName)
static ExecuteCallbackFunction($callbackFunc="", $module="", $productID=0)
static GetBasketUserID($bSkipFUserInit=false)
static GetProductProvider($arBasketItem)
static PrepareSql(&$arFields, $arOrder, &$arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql=false, $callback=false, $arOptions=array())
static GetList($arFilter)
static Update($ID, $arFields)
static GetFilterOperation($key, $value)
static GetProductList($ID, $minCNT, $limit, $getParentOnly=false)
static GetBestSellerList($by="AMOUNT", $arFilter=Array(), $arOrderFilter=Array(), $limit=0)
static DeleteForUser($FUSER_ID, $LIMIT=NULL)
static GetList($arOrder=array("ID"=>"DESC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_CATALOG_EXPORT_EDIT)) if((!isset($_REQUEST['IBLOCK_ID']))||($_REQUEST['IBLOCK_ID']=='')) $intIBlockID