$promomag = $onlineShop["ID"];
$entity = IblockTable::compileEntity('dondrakon');
$object = $entity->getIblock()->getEntityDataClass();
$query = $object::query()
->addFilter('ACTIVE', 'Y')
->addFilter('MAGAZINE.VALUE', $promomag)
->addSelect('TEXT_PROMOCODE.VALUE');
$elements = $query->fetchCollection();
foreach ($elements as $item) {
$arResult["ONLINE_SHOP"]['PROMO'][] = $item;
}
//echo "<pre>"; print_r($arResult["ONLINE_SHOP"]); echo "</pre>";
foreach ($elements as $item) {
$arResult["ONLINE_SHOP"]['PROMO'][] = $item['TEXT_PROMOCODE'];
}
<?
$arResult["ONLINE_SHOP"] = array(); //Интернет магазины
$arResult["OFFLINE_SHOP"] = array(); //Офлайн магазины
$arResult["GROUP_OFFLINE_SHOP"] = array(); //сгруперованные офлайн магазины
$sectionIds = array(); //id групп (сети магазинов)
//echo "<pre>"; print_r($arResult["ITEMS"]); echo "</pre>";
foreach($arResult["ITEMS"] as $shop){
if($shop["PROPERTIES"]["ONLINE_SHOP"]["VALUE"] == "Y"){ //
$arResult["ONLINE_SHOP"][] = $shop;
}
if($shop["PROPERTIES"]["OFFLINE_SHOP"]["VALUE"] == "Y"){
$arResult["OFFLINE_SHOP"][] = $shop;
}
}
foreach($arResult["OFFLINE_SHOP"] as $shop){
if($shop["IBLOCK_SECTION_ID"] > 0){ //значит это филиал входит в какую-то сеть
// алгоритм такой: нам нужно сгрупировать все филиалы в сеть магазинов.
if(!in_array($shop["IBLOCK_SECTION_ID"], $sectionIds)){ //если такой сети магазинов ещё нет
$sectionIds[] = $shop["IBLOCK_SECTION_ID"];
//сначала берем данный из первого попавшегося филиала, а потом возьмём данные из раздела, если они там конечно будут
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["SECTION_ID"] = $shop["IBLOCK_SECTION_ID"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["NAME"] = $shop["NAME"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["DESCRIPTION"] = $shop["PREVIEW_TEXT"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["ADDRESS"] = $shop["DISPLAY_PROPERTIES"]["ADDRESS"]["DISPLAY_VALUE"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["PHONES"] = $shop["DISPLAY_PROPERTIES"]["PHONES"]["VALUE"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["EMAIL"] = $shop["DISPLAY_PROPERTIES"]["EMAIL"]["DISPLAY_VALUE"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["WORKING_TIME"] = $shop["DISPLAY_PROPERTIES"]["WORKING_TIME"]["DISPLAY_VALUE"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["LINK"] = $shop["DISPLAY_PROPERTIES"]["LINK"]["VALUE"];
//$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$shop["IBLOCK_SECTION_ID"]]["PREVIEW_PICTURE"] = $shop["PREVIEW_PICTURE"];
}
}else{ // это одиночный магазинчик
//С 19.07.2021 это условие потеряло смысл, так как все офлайн магазины теперь храним в разделах, как и филиалы. else оставлен здесь чисто на всякий случай
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["NAME"] = $shop["NAME"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["DESCRIPTION"] = $shop["PREVIEW_TEXT"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["ADDRESS"] = $shop["DISPLAY_PROPERTIES"]["ADDRESS"]["DISPLAY_VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["PHONES"] = $shop["DISPLAY_PROPERTIES"]["PHONES"]["VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["EMAIL"] = $shop["DISPLAY_PROPERTIES"]["EMAIL"]["DISPLAY_VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["WORKING_TIME"] = $shop["DISPLAY_PROPERTIES"]["WORKING_TIME"]["DISPLAY_VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["LINK"] = $shop["DISPLAY_PROPERTIES"]["LINK"]["VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["MAP"] = $shop["DISPLAY_PROPERTIES"]["MAP"]["VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["CITY"] = $shop["DISPLAY_PROPERTIES"]["CITY"]["DISPLAY_VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["UNDERGROUND"] = $shop["DISPLAY_PROPERTIES"]["UNDERGROUND"]["DISPLAY_VALUE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["PREVIEW_PICTURE"] = $shop["PREVIEW_PICTURE"];
$arResult["GROUP_OFFLINE_SHOP"]["SHOP_".$shop["ID"]]["PRODUCTS_CATEGORY"] = $shop["DISPLAY_PROPERTIES"]["PRODUCTS_CATEGORY"];
}
}
//теперь для всех сетей получим значения из разделов
$arSections = array();
$arFilter = Array('IBLOCK_ID'=>$arResult["ID"], 'ID'=>$sectionIds);
$arSelect = array("ID", "IBLOCK_ID", "NAME", "PICTURE", "DESCRIPTION", "DESCRIPTION_TYPE", "UF_*");
$rsSect = CIBlockSection::GetList(Array(), $arFilter, true, $arSelect);
while ($arSect = $rsSect->GetNext()){
$arSections[] = $arSect;
}
//dump($arSections);
//ВАЖНО: свойства раздела перезатирают свойства из элемента
foreach($arSections as $arSect){ //заполняем наши сети новыми значениями, если они есть. А если их нет, то останутся старые (те, которые из элементов)
if(array_key_exists("SECTION_".$arSect["ID"], $arResult["GROUP_OFFLINE_SHOP"])){ //если такая сеть есть, то обновим в ней данные
if(!empty($arSect["NAME"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["NAME"] = $arSect["NAME"];
}
if(!empty($arSect["DESCRIPTION"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["DESCRIPTION"] = $arSect["DESCRIPTION"];
}
if(!empty($arSect["UF_ADDRESS"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["ADDRESS"] = $arSect["UF_ADDRESS"];
}
if(!empty($arSect["UF_PHONES"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["PHONES"] = $arSect["UF_PHONES"];
}
if(!empty($arSect["UF_EMAIL"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["EMAIL"] = $arSect["UF_EMAIL"];
}
if(!empty($arSect["UF_WORKING_TIME"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["WORKING_TIME"] = $arSect["UF_WORKING_TIME"];
}
if(!empty($arSect["UF_LINK"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["LINK"] = $arSect["UF_LINK"];
}
if(!empty($arSect["PICTURE"])){
$arResult["GROUP_OFFLINE_SHOP"]["SECTION_".$arSect["ID"]]["PREVIEW_PICTURE"] = CFile::GetFileArray($arSect["PICTURE"]);
}
}
}
//dump($arResult);
//формируем массив товарных категорий
$arProductsCategory = array();
foreach($arResult["ITEMS"] as $arItem){
foreach($arItem["DISPLAY_PROPERTIES"]["PRODUCTS_CATEGORY"]["VALUE"] as $key => $value){
$arProductsCategory[$value]["VALUE_XML"] = $value;
$arProductsCategory[$value]["VALUE_ID"] = $arItem["DISPLAY_PROPERTIES"]["PRODUCTS_CATEGORY"]["PROPERTY_VALUE_ID"][$key];
$arProductsCategory[$value]["NAME"] = $arItem["DISPLAY_PROPERTIES"]["PRODUCTS_CATEGORY"]["DISPLAY_VALUE"][$key];
$arProductsCategory[$value]["LINK"] = str_replace('+', '%2B', $APPLICATION->GetCurPageParam('products_category='.$value, array('products_category')));
}
}
$arResult["PRODUCTS_CATEGORY"]["SELECTED"] = array();
if(!empty($_GET["products_category"])){
foreach($arProductsCategory as &$arCategory){
if($arCategory["VALUE_XML"] == $_GET["products_category"]){
$arResult["PRODUCTS_CATEGORY"]["SELECTED"] = $arCategory;
$arCategory["IS_SELECTED"] = "Y";
break;
}
}
}
$arResult["PRODUCTS_CATEGORY"]["VALUES"] = $arProductsCategory;
//echo "<pre>"; print_r($arResult["ONLINE_SHOP"]); echo "</pre>";
foreach($arResult["ONLINE_SHOP"] as &$arOnlineShop){
$linkToSite = ""; //ссылка на товар в интернет магазине
if(!empty($arOnlineShop["DISPLAY_PROPERTIES"]["LINK_TEMPLATE"]["VALUE"])){ //если есть шаблон для ссылки, значит пробуем её сформировать
$linkToSite = $arOnlineShop["DISPLAY_PROPERTIES"]["LINK_TEMPLATE"]["VALUE"]; //на случай если шаблон и есть ссылка!
//достаём все нужные для формирования ссылки поля товара
preg_match_all( //выдёргиваем маркеры
'/(\#[a-zA-Z0-9_]+\#)/uim', //всё что начинается и заканчивается на символ решетки #
$arOnlineShop["DISPLAY_PROPERTIES"]["LINK_TEMPLATE"]["VALUE"],
$arMarkers
);
$arMarkers = $arMarkers[0]; //почему-то так, читайте документацию preg_match_all
//dump($arMarkers);
if(!empty($arMarkers)){ //если в шаблоне есть маркеры, то получаем значения для этих маркеров
$arSelect = Array("ID", "IBLOCK_ID");
foreach($arMarkers as $marker){
$field = str_replace("#", "", $marker); //убираем решеточки
$arSelect[] = $field;
}
$arFilter = Array("IBLOCK_ID"=>IBLOCK_CATALOG_ID, "=ID" => $arParams["PRODUCT_ID"]);
$resProduct = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
if($arProduct = $resProduct->GetNext()){
foreach($arProduct as $key => $field){ //перебираем поля товара
//это всё делаем для удобства, чтобы проще было менять маркеры на реальные значения.
//скорее всего алгоритм не оптимальный, можете сделать лучше
if(preg_match('/(PROPERTY_[a-zA-Z0-9_]+_VALUE)/uim', $key)){ //если ключ это свойство, убираем от туда _VALUE
$arProduct[str_replace("_VALUE", "", $key)] = $field;
}
}
//заменяем маркера в шаблоне полученными данными
foreach($arProduct as $key => $field){
if(!empty($field)){ //если есть значение
$linkToSite = str_replace("#".$key."#", $field, $linkToSite);
}else{ //если значения нет, то вообще убиваем ссылку
$linkToSite = "";
break;
}
}
}
//dump($arProduct);
}
}
$arOnlineShop["LINK_TO_SITE"] = $linkToSite;
}
$arSearch["TITLE_CUSTOM"]=getElProp("TITLE_CUSTOM", $arSearch["ITEM_ID"]);
$arSearch["CML2_ARTICLE"]=getElProp("CML2_ARTICLE", $arSearch["ITEM_ID"]);
$arSearch["TSVET"]=getElPropList("TSVET", $arSearch["ITEM_ID"]);
$arSearch["KOMPLEKTATSIYA_PERVICHNAYA_UPAKOVKA"]=getElProp("TITLE_CUSTOM", $arSearch["ITEM_ID"]);
$arSearch["TRANSPORTNAYA_UPAKOVKA"]=getElPropList("TRANSPORTNAYA_UPAKOVKA", $arSearch["ITEM_ID"]);
я ничего не менял, весь init.php должен работать