%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 3.135.200.4 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/catalog.section.list/ |
Upload File : |
<?php if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); /** @var CBitrixComponent $this */ /** @var array $arParams */ /** @var array $arResult */ /** @var string $componentPath */ /** @var string $componentName */ /** @var string $componentTemplate */ /** @global CDatabase $DB */ /** @global CUser $USER */ /** @global CMain $APPLICATION */ use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; use Bitrix\Iblock; /************************************************************************* Processing of received parameters *************************************************************************/ if (!isset($arParams["CACHE_TIME"])) { $arParams["CACHE_TIME"] = 36000000; } $arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"] ?? ''); $arParams["IBLOCK_ID"] = (int)($arParams["IBLOCK_ID"] ?? 0); $arParams["SECTION_ID"] = (int)($arParams["SECTION_ID"] ?? 0); $arParams["SECTION_CODE"] = trim($arParams["SECTION_CODE"] ?? ''); $arParams["SECTION_URL"] = trim($arParams["SECTION_URL"] ?? ''); $arParams["TOP_DEPTH"] = (int)($arParams["TOP_DEPTH"] ?? 0); if($arParams["TOP_DEPTH"] <= 0) { $arParams["TOP_DEPTH"] = 2; } $arParams["COUNT_ELEMENTS"] = !(isset($arParams["COUNT_ELEMENTS"]) && $arParams["COUNT_ELEMENTS"] === "N"); if (!isset($arParams["COUNT_ELEMENTS_FILTER"])) { $arParams["COUNT_ELEMENTS_FILTER"] = "CNT_ACTIVE"; } if ( $arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_ALL" && $arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_ACTIVE" && $arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_AVAILABLE" ) { $arParams["COUNT_ELEMENTS_FILTER"] = "CNT_ALL"; } $arParams["ADD_SECTIONS_CHAIN"] = !(isset($arParams["ADD_SECTIONS_CHAIN"]) && $arParams["ADD_SECTIONS_CHAIN"] === "N"); //Turn on by default if ( empty($arParams["FILTER_NAME"]) || !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"]) ) { $arrFilter = array(); } else { global ${$arParams["FILTER_NAME"]}; $arrFilter = ${$arParams["FILTER_NAME"]}; if(!is_array($arrFilter)) { $arrFilter = []; } } $arParams["CACHE_FILTER"] = isset($arParams["CACHE_FILTER"]) && $arParams["CACHE_FILTER"] == "Y"; if(!$arParams["CACHE_FILTER"] && !empty($arrFilter)) { $arParams["CACHE_TIME"] = 0; } $arParams['SHOW_TITLE'] = ($arParams['SHOW_TITLE'] ?? 'N') === 'Y'; $arResult["SECTIONS"] = array(); /************************************************************************* Work with cache *************************************************************************/ if ($this->startResultCache( false, array($arrFilter, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups())) )) { if (!Loader::includeModule("iblock")) { $this->abortResultCache(); ShowError(Loc::getMessage("IBLOCK_MODULE_NOT_INSTALLED")); return; } $existIblock = Iblock\IblockSiteTable::getList(array( 'select' => array('IBLOCK_ID'), 'filter' => array( '=IBLOCK_ID' => $arParams['IBLOCK_ID'], '=SITE_ID' => SITE_ID, '=IBLOCK.ACTIVE' => 'Y', ), ))->fetch(); if (empty($existIblock)) { $this->abortResultCache(); return; } $countTitleSuffix = '_ELEMENT'; if (Loader::includeModule('catalog')) { $catalog = CCatalogSku::GetInfoByIBlock($arParams['IBLOCK_ID']); if (!empty($catalog)) { $countTitleSuffix = '_PRODUCT'; } } $arFilter = array( "ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y", "IBLOCK_ID" => $arParams["IBLOCK_ID"], ); $arSelect = array(); if (!empty($arParams["SECTION_FIELDS"]) && is_array($arParams["SECTION_FIELDS"])) { foreach($arParams["SECTION_FIELDS"] as &$field) { if (!empty($field) && is_string($field)) { $arSelect[] = $field; } } unset($field); } if (!empty($arSelect)) { $arSelect = array_merge( $arSelect, array( "ID", "NAME", "LEFT_MARGIN", "RIGHT_MARGIN", "DEPTH_LEVEL", "IBLOCK_ID", "IBLOCK_SECTION_ID", "LIST_PAGE_URL", "SECTION_PAGE_URL" ) ); } $boolPicture = empty($arSelect) || in_array('PICTURE', $arSelect); if (!empty($arParams["SECTION_USER_FIELDS"]) && is_array($arParams["SECTION_USER_FIELDS"])) { foreach($arParams["SECTION_USER_FIELDS"] as &$field) { if(is_string($field) && preg_match("/^UF_/", $field)) { $arSelect[] = $field; } } unset($field); } $arSelect = array_unique($arSelect); $arResult["SECTION"] = false; $intSectionDepth = 0; if($arParams["SECTION_ID"]>0) { $arFilter["ID"] = $arParams["SECTION_ID"]; $rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect); $rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]); $arResult["SECTION"] = $rsSections->GetNext(); } elseif ($arParams["SECTION_CODE"] !== '') { $arFilter["=CODE"] = $arParams["SECTION_CODE"]; $rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect); $rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]); $arResult["SECTION"] = $rsSections->GetNext(); } if (is_array($arResult["SECTION"])) { $arResult["SECTION"]["~ELEMENT_CNT"] = null; $arResult["SECTION"]["ELEMENT_CNT"] = null; unset($arFilter["ID"]); unset($arFilter["=CODE"]); $arFilter["LEFT_MARGIN"] = $arResult["SECTION"]["LEFT_MARGIN"] + 1; $arFilter["RIGHT_MARGIN"] = $arResult["SECTION"]["RIGHT_MARGIN"]; $arFilter["<="."DEPTH_LEVEL"] = $arResult["SECTION"]["DEPTH_LEVEL"] + $arParams["TOP_DEPTH"]; $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arResult["SECTION"]["IBLOCK_ID"], $arResult["SECTION"]["ID"]); $arResult["SECTION"]["IPROPERTY_VALUES"] = $ipropValues->getValues(); $arResult["SECTION"]["PATH"] = array(); $rsPath = CIBlockSection::GetNavChain( $arResult["SECTION"]["IBLOCK_ID"], $arResult["SECTION"]["ID"], array( "ID", "CODE", "XML_ID", "EXTERNAL_ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "SORT", "NAME", "ACTIVE", "DEPTH_LEVEL", "SECTION_PAGE_URL" ) ); $rsPath->SetUrlTemplates("", $arParams["SECTION_URL"]); while($arPath = $rsPath->GetNext()) { if ($arParams["ADD_SECTIONS_CHAIN"]) { $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arParams["IBLOCK_ID"], $arPath["ID"]); $arPath["IPROPERTY_VALUES"] = $ipropValues->getValues(); } $arResult["SECTION"]["PATH"][]=$arPath; } } else { $arResult["SECTION"] = array( "ID" => 0, "DEPTH_LEVEL" => 0, ); $arFilter["<="."DEPTH_LEVEL"] = $arParams["TOP_DEPTH"]; } $intSectionDepth = $arResult["SECTION"]['DEPTH_LEVEL']; $sectionFilter = array_merge($arrFilter, $arFilter); $elementCountFilter = array( "IBLOCK_ID" => $arParams["IBLOCK_ID"], "CHECK_PERMISSIONS" => "Y", "MIN_PERMISSION" => "R", "INCLUDE_SUBSECTIONS" => (isset($sectionFilter["ELEMENT_SUBSECTIONS"]) && $sectionFilter["ELEMENT_SUBSECTIONS"] == "N" ? "N" : "Y") ); if (!empty($sectionFilter['PROPERTY']) && is_array($sectionFilter['PROPERTY'])) { foreach (array_keys($sectionFilter['PROPERTY']) as $propertyId) { $field = CIBlock::MkOperationFilter($propertyId); $elementCountFilter[$field['PREFIX'].'PROPERTY_'.$field['FIELD']] = $sectionFilter['PROPERTY'][$propertyId]; } unset($field, $propertyId, $value); } switch ($arParams["COUNT_ELEMENTS_FILTER"]) { case "CNT_ALL": break; case "CNT_ACTIVE": $elementCountFilter["ACTIVE"] = "Y"; $elementCountFilter["ACTIVE_DATE"] = "Y"; break; case "CNT_AVAILABLE": $elementCountFilter["ACTIVE"] = "Y"; $elementCountFilter["ACTIVE_DATE"] = "Y"; $elementCountFilter["AVAILABLE"] = "Y"; break; } if ($arParams["COUNT_ELEMENTS"] && $arResult['SECTION']['ID'] > 0) { $elementFilter = $elementCountFilter; $elementFilter['SECTION_ID'] = $arResult['SECTION']['ID']; if ($arResult['SECTION']['RIGHT_MARGIN'] == ($arResult['SECTION']['LEFT_MARGIN'] + 1)) { $elementFilter['INCLUDE_SUBSECTIONS'] = 'N'; } $arResult["SECTION"]["~ELEMENT_CNT"] = CIBlockElement::GetList(array(), $elementFilter, array()); $arResult["SECTION"]["ELEMENT_CNT"] = $arResult["SECTION"]["~ELEMENT_CNT"]; if (!empty($arResult["SECTION"]["ELEMENT_CNT"])) { $count = (int)$arResult["SECTION"]["ELEMENT_CNT"]; $val = ($count < 100 ? $count : $count % 100); $dec = $val % 10; if ($val == 0) { $messageId = 'CP_BCSL_MESS_COUNT_ZERO'; } elseif ($val == 1) { $messageId = 'CP_BCSL_MESS_COUNT_ONE'; } elseif ($val >= 10 && $val <= 20) { $messageId = 'CP_BCSL_MESS_COUNT_TEN'; } elseif ($dec == 1) { $messageId = 'CP_BCSL_MESS_COUNT_MOD_ONE'; } elseif (2 <= $dec && $dec <= 4) { $messageId = 'CP_BCSL_MESS_COUNT_MOD_TWO'; } else { $messageId = 'CP_BCSL_MESS_COUNT_OTHER'; } $messageId .= $countTitleSuffix; $arResult["SECTION"]['ELEMENT_CNT_TITLE'] = Loc::getMessage($messageId, ['#VALUE#' => $count]); } } //ORDER BY $arSort = array(); if (!empty($this->arParams['CUSTOM_SECTION_SORT']) && is_array($this->arParams['CUSTOM_SECTION_SORT'])) { foreach ($this->arParams['CUSTOM_SECTION_SORT'] as $field => $value) { if (!is_string($value)) { continue; } $field = strtoupper($field); if (isset($arSort[$field])) { continue; } if (!preg_match('/^(asc|desc|nulls)(,asc|,desc|,nulls)?$/i', $value)) { continue; } $arSort[$field] = $value; } unset($field, $value); } if (empty($arSort)) { $arSort = array( "LEFT_MARGIN" => "ASC", ); } //EXECUTE $rsSections = CIBlockSection::GetList($arSort, $sectionFilter, false, $arSelect); $rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]); while($arSection = $rsSections->GetNext()) { \Bitrix\Iblock\InheritedProperty\SectionValues::queue($arSection["IBLOCK_ID"], $arSection["ID"]); $arSection['RELATIVE_DEPTH_LEVEL'] = $arSection['DEPTH_LEVEL'] - $intSectionDepth; $arButtons = CIBlock::GetPanelButtons( $arSection["IBLOCK_ID"], 0, $arSection["ID"], array("SESSID"=>false, "CATALOG"=>true) ); $arSection["EDIT_LINK"] = $arButtons["edit"]["edit_section"]["ACTION_URL"]; $arSection["DELETE_LINK"] = $arButtons["edit"]["delete_section"]["ACTION_URL"]; $arSection["~ELEMENT_CNT"] = null; $arSection["ELEMENT_CNT"] = null; $arSection['ELEMENT_CNT_TITLE'] = ''; $arResult["SECTIONS"][]=$arSection; } foreach ($arResult["SECTIONS"] as &$arSection) { $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arSection["IBLOCK_ID"], $arSection["ID"]); $arSection["IPROPERTY_VALUES"] = $ipropValues->getValues(); if ($boolPicture) { \Bitrix\Iblock\Component\Tools::getFieldImageData( $arSection, array('PICTURE'), \Bitrix\Iblock\Component\Tools::IPROPERTY_ENTITY_SECTION, 'IPROPERTY_VALUES' ); } if ($arParams["COUNT_ELEMENTS"]) { $elementFilter = $elementCountFilter; $elementFilter["SECTION_ID"] = $arSection["ID"]; if ($arSection['RIGHT_MARGIN'] == ($arSection['LEFT_MARGIN'] + 1)) { $elementFilter['INCLUDE_SUBSECTIONS'] = 'N'; } $arSection["~ELEMENT_CNT"] = CIBlockElement::GetList(array(), $elementFilter, array()); $arSection["ELEMENT_CNT"] = $arSection["~ELEMENT_CNT"]; if (!empty($arSection["ELEMENT_CNT"])) { $count = (int)$arSection["ELEMENT_CNT"]; $val = ($count < 100 ? $count : $count % 100); $dec = $val % 10; if ($val == 0) { $messageId = 'CP_BCSL_MESS_COUNT_ZERO'; } elseif ($val == 1) { $messageId = 'CP_BCSL_MESS_COUNT_ONE'; } elseif ($val >= 10 && $val <= 20) { $messageId = 'CP_BCSL_MESS_COUNT_TEN'; } elseif ($dec == 1) { $messageId = 'CP_BCSL_MESS_COUNT_MOD_ONE'; } elseif (2 <= $dec && $dec <= 4) { $messageId = 'CP_BCSL_MESS_COUNT_MOD_TWO'; } else { $messageId = 'CP_BCSL_MESS_COUNT_OTHER'; } $messageId .= $countTitleSuffix; $arSection['ELEMENT_CNT_TITLE'] = Loc::getMessage($messageId, ['#VALUE#' => $count]); } } } unset($arSection); $arResult["SECTIONS_COUNT"] = count($arResult["SECTIONS"]); $this->setResultCacheKeys(array( "SECTIONS_COUNT", "SECTION", )); $this->includeComponentTemplate(); } if ($arResult["SECTIONS_COUNT"] > 0 || isset($arResult["SECTION"])) { if( $USER->IsAuthorized() && $APPLICATION->GetShowIncludeAreas() && Loader::includeModule("iblock") ) { $UrlDeleteSectionButton = ""; if (isset($arResult["SECTION"]) && $arResult["SECTION"]['IBLOCK_SECTION_ID'] > 0) { $rsSection = CIBlockSection::GetList( array(), array("=ID" => $arResult["SECTION"]['IBLOCK_SECTION_ID']), false, array("SECTION_PAGE_URL") ); $rsSection->SetUrlTemplates("", $arParams["SECTION_URL"]); $arSection = $rsSection->GetNext(); $UrlDeleteSectionButton = $arSection["SECTION_PAGE_URL"]; } if (empty($UrlDeleteSectionButton)) { $url_template = CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "LIST_PAGE_URL"); $arIBlock = CIBlock::GetArrayByID($arParams["IBLOCK_ID"]); $arIBlock["IBLOCK_CODE"] = $arIBlock["CODE"]; $UrlDeleteSectionButton = CIBlock::ReplaceDetailUrl($url_template, $arIBlock, true, false); } $arReturnUrl = array( "add_section" => ( '' != $arParams["SECTION_URL"]? $arParams["SECTION_URL"]: CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "SECTION_PAGE_URL") ), "add_element" => ( '' != $arParams["SECTION_URL"]? $arParams["SECTION_URL"]: CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "SECTION_PAGE_URL") ), "delete_section" => $UrlDeleteSectionButton, ); $arButtons = CIBlock::GetPanelButtons( $arParams["IBLOCK_ID"], 0, $arResult["SECTION"]["ID"], array("RETURN_URL" => $arReturnUrl, "CATALOG"=>true) ); $this->addIncludeAreaIcons(CIBlock::GetComponentMenu($APPLICATION->GetPublicShowMode(), $arButtons)); } if($arParams["ADD_SECTIONS_CHAIN"] && isset($arResult["SECTION"]) && is_array($arResult["SECTION"]["PATH"])) { foreach($arResult["SECTION"]["PATH"] as $arPath) { if ( isset($arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"]) && $arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"] !== "" ) { $APPLICATION->AddChainItem( $arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"], $arPath["~SECTION_PAGE_URL"] ); } else { $APPLICATION->AddChainItem( $arPath["NAME"], $arPath["~SECTION_PAGE_URL"] ); } } } }