Advertisement
Guest User

component.php

a guest
Feb 24th, 2018
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.15 KB | None | 0 0
  1. <?
  2. if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  3. /** @var CBitrixComponent $this */
  4. /** @var array $arParams */
  5. /** @var array $arResult */
  6. /** @var string $componentPath */
  7. /** @var string $componentName */
  8. /** @var string $componentTemplate */
  9. /** @global CDatabase $DB */
  10. /** @global CUser $USER */
  11. /** @global CMain $APPLICATION */
  12.  
  13.  
  14. if(!isset($arParams["CACHE_TIME"]))
  15.     $arParams["CACHE_TIME"] = 36000000;
  16.  
  17. $arParams["ID"] = intval($arParams["ID"]);
  18. $arParams["IBLOCK_ID"] = intval($arParams["IBLOCK_ID"]);
  19.  
  20. $arParams["DEPTH_LEVEL"] = intval($arParams["DEPTH_LEVEL"]);
  21. if($arParams["DEPTH_LEVEL"]<=0)
  22.     $arParams["DEPTH_LEVEL"]=1;
  23.  
  24. $arResult["SECTIONS"] = array();
  25. $arResult["ELEMENT_LINKS"] = array();
  26.  
  27. if($this->StartResultCache())
  28. {
  29.     if(!CModule::IncludeModule("iblock"))
  30.     {
  31.         $this->AbortResultCache();
  32.     }
  33.     else
  34.     {
  35.         $arFilter = array(
  36.             "IBLOCK_ID"=>$arParams["IBLOCK_ID"],
  37.             "GLOBAL_ACTIVE"=>"Y",
  38.             "IBLOCK_ACTIVE"=>"Y",
  39.             "<="."DEPTH_LEVEL" => $arParams["DEPTH_LEVEL"],
  40.         );
  41.         $arOrder = array(
  42.             "left_margin"=>"asc",
  43.         );
  44.  
  45.         $rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, array(
  46.             "ID",
  47.             "DEPTH_LEVEL",
  48.             "NAME",
  49.             "PICTURE",
  50.             "SECTION_PAGE_URL",
  51.         ));
  52.         if($arParams["IS_SEF"] !== "Y")
  53.             $rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]);
  54.         else
  55.             $rsSections->SetUrlTemplates("", $arParams["SEF_BASE_URL"].$arParams["SECTION_PAGE_URL"]);
  56.         while($arSection = $rsSections->GetNext())
  57.         {
  58.             $arResult["SECTIONS"][] = array(
  59.                 "ID" => $arSection["ID"],
  60.                 "DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
  61.                 "~NAME" => $arSection["~NAME"],
  62.                 "~SECTION_PAGE_URL" => $arSection["~SECTION_PAGE_URL"],
  63.             );
  64.             $arResult["ELEMENT_LINKS"][$arSection["ID"]] = array();
  65.         }
  66.         $this->EndResultCache();
  67.     }
  68. }
  69.  
  70. //In "SEF" mode we'll try to parse URL and get ELEMENT_ID from it
  71. if($arParams["IS_SEF"] === "Y")
  72. {
  73.     $engine = new CComponentEngine($this);
  74.     if (CModule::IncludeModule('iblock'))
  75.     {
  76.         $engine->addGreedyPart("#SECTION_CODE_PATH#");
  77.         $engine->setResolveCallback(array("CIBlockFindTools", "resolveComponentEngine"));
  78.     }
  79.     $componentPage = $engine->guessComponentPath(
  80.         $arParams["SEF_BASE_URL"],
  81.         array(
  82.             "section" => $arParams["SECTION_PAGE_URL"],
  83.             "detail" => $arParams["DETAIL_PAGE_URL"],
  84.         ),
  85.         $arVariables
  86.     );
  87.     if($componentPage === "detail")
  88.     {
  89.         CComponentEngine::InitComponentVariables(
  90.             $componentPage,
  91.             array("SECTION_ID", "ELEMENT_ID"),
  92.             array(
  93.                 "section" => array("SECTION_ID" => "SECTION_ID"),
  94.                 "detail" => array("SECTION_ID" => "SECTION_ID", "ELEMENT_ID" => "ELEMENT_ID"),
  95.             ),
  96.             $arVariables
  97.         );
  98.         $arParams["ID"] = intval($arVariables["ELEMENT_ID"]);
  99.     }
  100. }
  101.  
  102. if(($arParams["ID"] > 0) && (intval($arVariables["SECTION_ID"]) <= 0) && CModule::IncludeModule("iblock"))
  103. {
  104.     $arSelect = array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL", "IBLOCK_SECTION_ID");
  105.     $arFilter = array(
  106.         "ID" => $arParams["ID"],
  107.         "ACTIVE" => "Y",
  108.         "IBLOCK_ID" => $arParams["IBLOCK_ID"],
  109.     );
  110.     $rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
  111.     if(($arParams["IS_SEF"] === "Y") && (strlen($arParams["DETAIL_PAGE_URL"]) > 0))
  112.         $rsElements->SetUrlTemplates($arParams["SEF_BASE_URL"].$arParams["DETAIL_PAGE_URL"]);
  113.     while($arElement = $rsElements->GetNext())
  114.     {
  115.         $arResult["ELEMENT_LINKS"][$arElement["IBLOCK_SECTION_ID"]][] = $arElement["~DETAIL_PAGE_URL"];
  116.     }
  117. }
  118.  
  119. $aMenuLinksNew = array();
  120. $menuIndex = 0;
  121. $previousDepthLevel = 1;
  122. foreach($arResult["SECTIONS"] as $arSection)
  123. {
  124.     if ($menuIndex > 0)
  125.         $aMenuLinksNew[$menuIndex - 1][3]["IS_PARENT"] = $arSection["DEPTH_LEVEL"] > $previousDepthLevel;
  126.     $previousDepthLevel = $arSection["DEPTH_LEVEL"];
  127.  
  128.     $arResult["ELEMENT_LINKS"][$arSection["ID"]][] = urldecode($arSection["~SECTION_PAGE_URL"]);
  129.     $aMenuLinksNew[$menuIndex++] = array(
  130.         htmlspecialcharsbx($arSection["~NAME"]),
  131.         $arSection["~SECTION_PAGE_URL"],
  132.         $arResult["ELEMENT_LINKS"][$arSection["ID"]],
  133.         array(
  134.             "FROM_IBLOCK" => true,
  135.             "PICTURE" => $arSection["PICTURE"],
  136.             "IS_PARENT" => false,
  137.             "DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
  138.         ),
  139.     );
  140. }
  141.  
  142. return $aMenuLinksNew;
  143. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement