Ejemplo n.º 1
0
 public static function ReplaceDetailUrl($url, $arr, $server_name = false, $arrType = false)
 {
     /** @global CDatabase $DB */
     global $DB;
     static $arSectionCache = array();
     static $arSectionPathCache = array();
     if ($server_name) {
         $url = str_replace("#LANG#", $arr["LANG_DIR"], $url);
         if (defined("ADMIN_SECTION") && ADMIN_SECTION === true || !defined("BX_STARTED")) {
             static $cache = array();
             if (!isset($cache[$arr["LID"]])) {
                 $db_lang = CLang::GetByID($arr["LID"]);
                 $arLang = $db_lang->Fetch();
                 $cache[$arr["LID"]] = $arLang;
             }
             $arLang = $cache[$arr["LID"]];
             $url = str_replace("#SITE_DIR#", $arLang["DIR"], $url);
             $url = str_replace("#SERVER_NAME#", $arLang["SERVER_NAME"], $url);
         } else {
             $url = str_replace("#SITE_DIR#", SITE_DIR, $url);
             $url = str_replace("#SERVER_NAME#", SITE_SERVER_NAME, $url);
         }
     }
     if (strpos($url, "#PRODUCT_URL#") !== false) {
         $url = str_replace("#PRODUCT_URL#", CIBlock::_GetProductUrl($arr["ID"], $arr["IBLOCK_ID"], $server_name, $arrType), $url);
     }
     static $arSearch = array("#SITE_DIR#", "#ID#", "#CODE#", "#EXTERNAL_ID#", "#IBLOCK_TYPE_ID#", "#IBLOCK_ID#", "#IBLOCK_CODE#", "#IBLOCK_EXTERNAL_ID#", "#ELEMENT_ID#", "#ELEMENT_CODE#", "#SECTION_ID#", "#SECTION_CODE#", "#SECTION_CODE_PATH#");
     $arReplace = array($arr["LANG_DIR"], intval($arr["ID"]) > 0 ? intval($arr["ID"]) : "", urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]), urlencode(isset($arr["~EXTERNAL_ID"]) ? $arr["~EXTERNAL_ID"] : $arr["EXTERNAL_ID"]), urlencode(isset($arr["~IBLOCK_TYPE_ID"]) ? $arr["~IBLOCK_TYPE_ID"] : $arr["IBLOCK_TYPE_ID"]), intval($arr["IBLOCK_ID"]) > 0 ? intval($arr["IBLOCK_ID"]) : "", urlencode(isset($arr["~IBLOCK_CODE"]) ? $arr["~IBLOCK_CODE"] : $arr["IBLOCK_CODE"]), urlencode(isset($arr["~IBLOCK_EXTERNAL_ID"]) ? $arr["~IBLOCK_EXTERNAL_ID"] : $arr["IBLOCK_EXTERNAL_ID"]));
     if ($arrType === "E") {
         $arReplace[] = intval($arr["ID"]) > 0 ? intval($arr["ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]);
         #Deal with symbol codes
         $SECTION_CODE = "";
         $SECTION_ID = intval($arr["IBLOCK_SECTION_ID"]);
         if ($SECTION_ID > 0 && (strpos($url, "#SECTION_CODE#") !== false || strpos($url, "#SECTION_CODE_PATH#") !== false)) {
             if (!array_key_exists($SECTION_ID, $arSectionCache)) {
                 $res = $DB->Query("SELECT IBLOCK_ID, CODE FROM b_iblock_section WHERE ID = " . $SECTION_ID);
                 $arSectionCache[$SECTION_ID] = $res->Fetch();
             }
             if (is_array($arSectionCache[$SECTION_ID])) {
                 $SECTION_CODE = $arSectionCache[$SECTION_ID]["CODE"];
             }
         }
         $SECTION_CODE_PATH = "";
         if ($SECTION_ID > 0 && array_key_exists($SECTION_ID, $arSectionCache) && strpos($url, "#SECTION_CODE_PATH#") !== false) {
             if (!array_key_exists($SECTION_ID, $arSectionPathCache)) {
                 $res = CIBlockSection::GetNavChain($arSectionCache[$SECTION_ID]["IBLOCK_ID"], $SECTION_ID, array("ID", "IBLOCK_SECTION_ID", "CODE"));
                 while ($a = $res->Fetch()) {
                     $arSectionPathCache[$SECTION_ID] .= urlencode($a["CODE"]) . "/";
                 }
             }
             if (isset($arSectionCache[$SECTION_ID])) {
                 $SECTION_CODE_PATH = rtrim($arSectionPathCache[$SECTION_ID], "/");
             }
         }
         $arReplace[] = $SECTION_ID > 0 ? $SECTION_ID : "";
         $arReplace[] = urlencode($SECTION_CODE);
         $arReplace[] = $SECTION_CODE_PATH;
     } elseif ($arrType === "S") {
         $SECTION_ID = intval($arr["ID"]);
         $SECTION_CODE_PATH = "";
         if (strpos($url, "#SECTION_CODE_PATH#") !== false && $SECTION_ID > 0) {
             if (!array_key_exists($SECTION_ID, $arSectionCache)) {
                 $res = $DB->Query("SELECT IBLOCK_ID, CODE FROM b_iblock_section WHERE ID = " . $SECTION_ID);
                 $arSectionCache[$SECTION_ID] = $res->Fetch();
             }
             if (is_array($arSectionCache[$SECTION_ID])) {
                 if (!array_key_exists($SECTION_ID, $arSectionPathCache)) {
                     $res = CIBlockSection::GetNavChain($arSectionCache[$SECTION_ID]["IBLOCK_ID"], $SECTION_ID, array("ID", "IBLOCK_SECTION_ID", "CODE"));
                     while ($a = $res->Fetch()) {
                         $arSectionPathCache[$SECTION_ID] .= urlencode($a["CODE"]) . "/";
                     }
                 }
                 if (isset($arSectionCache[$SECTION_ID])) {
                     $SECTION_CODE_PATH = rtrim($arSectionPathCache[$SECTION_ID], "/");
                 }
             }
         }
         $arReplace[] = "";
         $arReplace[] = "";
         $arReplace[] = $SECTION_ID > 0 ? $SECTION_ID : "";
         $arReplace[] = urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]);
         $arReplace[] = $SECTION_CODE_PATH;
     } else {
         $arReplace[] = intval($arr["ELEMENT_ID"]) > 0 ? intval($arr["ELEMENT_ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~ELEMENT_CODE"]) ? $arr["~ELEMENT_CODE"] : $arr["ELEMENT_CODE"]);
         $arReplace[] = intval($arr["IBLOCK_SECTION_ID"]) > 0 ? intval($arr["IBLOCK_SECTION_ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~SECTION_CODE"]) ? $arr["~SECTION_CODE"] : $arr["SECTION_CODE"]);
         $arReplace[] = "";
     }
     $url = str_replace($arSearch, $arReplace, $url);
     return preg_replace("'(?<!:)/+'s", "/", $url);
 }
Ejemplo n.º 2
0
 public static function ReplaceDetailUrl($url, $arr, $server_name = false, $arrType = false)
 {
     /** @global CDatabase $DB */
     global $DB;
     if ($server_name) {
         $url = str_replace("#LANG#", $arr["LANG_DIR"], $url);
         if (defined("ADMIN_SECTION") && ADMIN_SECTION === true || !defined("BX_STARTED")) {
             static $cache = array();
             if (!isset($cache[$arr["LID"]])) {
                 $db_lang = CLang::GetByID($arr["LID"]);
                 $arLang = $db_lang->Fetch();
                 $cache[$arr["LID"]] = $arLang;
             }
             $arLang = $cache[$arr["LID"]];
             $url = str_replace("#SITE_DIR#", $arLang["DIR"], $url);
             $url = str_replace("#SERVER_NAME#", $arLang["SERVER_NAME"], $url);
         } else {
             $url = str_replace("#SITE_DIR#", SITE_DIR, $url);
             $url = str_replace("#SERVER_NAME#", SITE_SERVER_NAME, $url);
         }
     }
     if (strpos($url, "#PRODUCT_URL#") !== false) {
         $url = str_replace("#PRODUCT_URL#", CIBlock::_GetProductUrl($arr["ID"], $arr["IBLOCK_ID"], $server_name, $arrType), $url);
     }
     static $arSearch = array("#SITE_DIR#", "#ID#", "#CODE#", "#EXTERNAL_ID#", "#IBLOCK_TYPE_ID#", "#IBLOCK_ID#", "#IBLOCK_CODE#", "#IBLOCK_EXTERNAL_ID#", "#ELEMENT_ID#", "#ELEMENT_CODE#", "#SECTION_ID#", "#SECTION_CODE#", "#SECTION_CODE_PATH#");
     $arReplace = array($arr["LANG_DIR"], intval($arr["ID"]) > 0 ? intval($arr["ID"]) : "", urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]), urlencode(isset($arr["~EXTERNAL_ID"]) ? $arr["~EXTERNAL_ID"] : $arr["EXTERNAL_ID"]), urlencode(isset($arr["~IBLOCK_TYPE_ID"]) ? $arr["~IBLOCK_TYPE_ID"] : $arr["IBLOCK_TYPE_ID"]), intval($arr["IBLOCK_ID"]) > 0 ? intval($arr["IBLOCK_ID"]) : "", urlencode(isset($arr["~IBLOCK_CODE"]) ? $arr["~IBLOCK_CODE"] : $arr["IBLOCK_CODE"]), urlencode(isset($arr["~IBLOCK_EXTERNAL_ID"]) ? $arr["~IBLOCK_EXTERNAL_ID"] : $arr["IBLOCK_EXTERNAL_ID"]));
     if ($arrType === "E") {
         $arReplace[] = intval($arr["ID"]) > 0 ? intval($arr["ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]);
         #Deal with symbol codes
         $SECTION_ID = intval($arr["IBLOCK_SECTION_ID"]);
         $SECTION_CODE = "";
         if ($SECTION_ID > 0 && strpos($url, "#SECTION_CODE#") !== false) {
             $SECTION_CODE = CIBlockSection::getSectionCode($SECTION_ID);
         }
         $SECTION_CODE_PATH = "";
         if ($SECTION_ID > 0 && strpos($url, "#SECTION_CODE_PATH#") !== false) {
             $SECTION_CODE_PATH = CIBlockSection::getSectionCodePath($SECTION_ID);
         }
         $arReplace[] = $SECTION_ID > 0 ? $SECTION_ID : "";
         $arReplace[] = $SECTION_CODE;
         $arReplace[] = $SECTION_CODE_PATH;
     } elseif ($arrType === "S") {
         $SECTION_ID = intval($arr["ID"]);
         $SECTION_CODE_PATH = "";
         if ($SECTION_ID > 0 && strpos($url, "#SECTION_CODE_PATH#") !== false) {
             $SECTION_CODE_PATH = CIBlockSection::getSectionCodePath($SECTION_ID);
         }
         $arReplace[] = "";
         $arReplace[] = "";
         $arReplace[] = $SECTION_ID > 0 ? $SECTION_ID : "";
         $arReplace[] = urlencode(isset($arr["~CODE"]) ? $arr["~CODE"] : $arr["CODE"]);
         $arReplace[] = $SECTION_CODE_PATH;
     } else {
         $arReplace[] = intval($arr["ELEMENT_ID"]) > 0 ? intval($arr["ELEMENT_ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~ELEMENT_CODE"]) ? $arr["~ELEMENT_CODE"] : $arr["ELEMENT_CODE"]);
         $arReplace[] = intval($arr["IBLOCK_SECTION_ID"]) > 0 ? intval($arr["IBLOCK_SECTION_ID"]) : "";
         $arReplace[] = urlencode(isset($arr["~SECTION_CODE"]) ? $arr["~SECTION_CODE"] : $arr["SECTION_CODE"]);
         $arReplace[] = "";
     }
     $url = str_replace($arSearch, $arReplace, $url);
     return preg_replace("'(?<!:)/+'s", "/", $url);
 }