function GetRSSText($arIBLOCK, $LIMIT_NUM = false, $LIMIT_DAY = false, $yandex = false) { global $DB; $strRes = ""; $serverName = ""; if (isset($arIBLOCK["SERVER_NAME"]) && strlen($arIBLOCK["SERVER_NAME"]) > 0) { $serverName = $arIBLOCK["SERVER_NAME"]; } if (strlen($serverName) <= 0 && !isset($arIBLOCK["SERVER_NAME"])) { $dbSite = CSite::GetList($b = "sort", $o = "asc", array("LID" => $arIBLOCK["LID"])); if ($arSite = $dbSite->Fetch()) { $serverName = $arSite["SERVER_NAME"]; } } if (strlen($serverName) <= 0) { if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) { $serverName = SITE_SERVER_NAME; } else { $serverName = COption::GetOptionString("main", "server_name", "www.bitrixsoft.com"); } } $strRes .= "<channel>\n"; $strRes .= "<title>" . htmlspecialcharsbx($arIBLOCK["NAME"]) . "</title>\n"; $strRes .= "<link>http://" . $serverName . "</link>\n"; $strRes .= "<description>" . htmlspecialcharsbx($arIBLOCK["DESCRIPTION"]) . "</description>\n"; $strRes .= "<lastBuildDate>" . date("r") . "</lastBuildDate>\n"; $strRes .= "<ttl>" . $arIBLOCK["RSS_TTL"] . "</ttl>\n"; $db_img_arr = CFile::GetFileArray($arIBLOCK["PICTURE"]); if ($db_img_arr) { if (substr($db_img_arr["SRC"], 0, 1) == "/") { $strImage = "http://" . $serverName . $db_img_arr["SRC"]; } else { $strImage = $db_img_arr["SRC"]; } $strRes .= "<image>\n"; $strRes .= "<title>" . htmlspecialcharsbx($arIBLOCK["NAME"]) . "</title>\n"; $strRes .= "<url>" . $strImage . "</url>\n"; $strRes .= "<link>http://" . $serverName . "</link>\n"; $strRes .= "<width>" . $db_img_arr["WIDTH"] . "</width>\n"; $strRes .= "<height>" . $db_img_arr["HEIGHT"] . "</height>\n"; $strRes .= "</image>\n"; } $arNodes = array(); $db_res = $DB->Query("SELECT NODE, NODE_VALUE FROM b_iblock_rss WHERE IBLOCK_ID = " . IntVal($arIBLOCK["ID"])); while ($db_res_arr = $db_res->Fetch()) { $arNodes[$db_res_arr["NODE"]] = $db_res_arr["NODE_VALUE"]; } CTimeZone::Disable(); $strSql = "SELECT DISTINCT BE.*, " . "\t" . $DB->DateToCharFunction("BE.TIMESTAMP_X") . " as TIMESTAMP_X, " . "\t" . $DB->DateToCharFunction("BE.ACTIVE_FROM", "FULL") . " as ACTIVE_FROM, " . "\t" . $DB->DateToCharFunction("BE.ACTIVE_TO", "FULL") . " as ACTIVE_TO, " . "\tL.DIR as LANG_DIR, B.DETAIL_PAGE_URL, B.LIST_PAGE_URL, B.LID, L.SERVER_NAME " . "FROM b_iblock_element BE, b_lang L, b_iblock B " . "\tLEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID " . "WHERE BE.IBLOCK_ID = B.ID " . "\tAND B.LID = L.LID " . "\tAND IBG.GROUP_ID IN (2) " . "\tAND BE.WF_STATUS_ID = 1 AND BE.WF_PARENT_ELEMENT_ID is null " . "\tAND IBG.PERMISSION>='R' " . "\tAND (IBG.PERMISSION='X' OR B.ACTIVE='Y') " . "\tAND (BE.IBLOCK_ID = " . IntVal($arIBLOCK["ID"]) . ") " . "\tAND ((BE.ACTIVE_TO >= " . $DB->GetNowFunction() . " OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= " . $DB->GetNowFunction() . " OR BE.ACTIVE_FROM IS NULL)) " . "\tAND (BE.ACTIVE = 'Y') "; if ($LIMIT_DAY !== false) { $strSql .= " AND (BE.ACTIVE_FROM>=" . $DB->CharToDateFunction($DB->ForSql(date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(date("H"), date("i"), date("s"), date("m"), date("d") - IntVal($LIMIT_DAY), date("Y")))), "FULL") . " OR BE.ACTIVE_FROM IS NULL) "; } $strSql .= "ORDER BY BE.ACTIVE_FROM DESC, BE.SORT ASC "; $res = $DB->Query($strSql); CTimeZone::Enable(); $items = new CIBlockResult($res->result); if ($LIMIT_NUM !== False && IntVal($LIMIT_NUM) > 0) { $items->NavStart($LIMIT_NUM); } while ($arItem = $items->GetNext()) { $props = CIBlockElement::GetProperty($arIBLOCK["ID"], $arItem["ID"], "sort", "asc", array("ACTIVE" => "Y", "NON_EMPTY" => "Y")); $arProps = array(); while ($arProp = $props->Fetch()) { if (strlen($arProp["CODE"]) > 0) { $arProps[$arProp["CODE"]] = array("NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => htmlspecialcharsex($arProp["VALUE"])); } else { $arProps[$arProp["ID"]] = array("NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => htmlspecialcharsex($arProp["VALUE"])); } } $arLinkProp = $arProps["DOC_LINK"]; $strRes .= "<item>\n"; if (strlen($arNodes["title"]) > 0) { $strRes .= "<title>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["title"], $arProps, $arItem)) . "</title>\n"; } else { $strRes .= "<title>" . htmlspecialcharsbx($arItem["~NAME"]) . "</title>\n"; } if (strlen($arNodes["link"]) > 0) { $strRes .= "<link>" . CIBlockRSS::ExtractProperties($arNodes["link"], $arProps, $arItem) . "</link>\n"; } else { $strRes .= "<link>http://" . $serverName . ($arLinkProp["VALUE"] ? $arLinkProp["VALUE"] : $arItem["DETAIL_PAGE_URL"]) . "</link>\n"; } if (strlen($arNodes["description"]) > 0) { $strRes .= "<description>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["description"], $arProps, $arItem)) . "</description>\n"; } else { $strRes .= "<description>" . ($arItem["PREVIEW_TEXT"] || $yandex ? htmlspecialcharsbx($arItem["PREVIEW_TEXT"]) : htmlspecialcharsbx($arItem["DETAIL_TEXT"])) . "</description>\n"; } if (strlen($arNodes["enclosure"]) > 0) { $strRes .= "<enclosure url=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure"], $arProps, $arItem)) . "\" length=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure_length"], $arProps, $arItem)) . "\" type=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure_type"], $arProps, $arItem)) . "\"/>\n"; } else { $db_img_arr = CFile::GetFileArray($arItem["PREVIEW_PICTURE"]); if ($db_img_arr) { if (substr($db_img_arr["SRC"], 0, 1) == "/") { $strImage = "http://" . $serverName . $db_img_arr["SRC"]; } else { $strImage = $db_img_arr["SRC"]; } $strRes .= "<enclosure url=\"" . $strImage . "\" length=\"" . $db_img_arr["FILE_SIZE"] . "\" type=\"" . $db_img_arr["CONTENT_TYPE"] . "\" width=\"" . $db_img_arr["WIDTH"] . "\" height=\"" . $db_img_arr["HEIGHT"] . "\"/>\n"; } } if (strlen($arNodes["category"]) > 0) { $strRes .= "<category>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["category"], $arProps, $arItem)) . "</category>\n"; } else { $strPath = ""; $nav = CIBlockSection::GetNavChain($arIBLOCK["ID"], $arItem["IBLOCK_SECTION_ID"]); while ($ar_nav = $nav->GetNext()) { $strPath .= $ar_nav["NAME"] . "/"; } if (strlen($strPath) > 0) { $strRes .= "<category>" . htmlspecialcharsbx($strPath) . "</category>\n"; } } if ($yandex) { $strRes .= "<yandex:full-text>" . htmlspecialcharsbx($arItem["DETAIL_TEXT"]) . "</yandex:full-text>\n"; } if (strlen($arNodes["pubDate"]) > 0) { $strRes .= "<pubDate>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["pubDate"], $arProps, $arItem)) . "</pubDate>\n"; } else { if (strlen($arItem["ACTIVE_FROM"]) > 0) { $strRes .= "<pubDate>" . date("r", MkDateTime($DB->FormatDate($arItem["ACTIVE_FROM"], Clang::GetDateFormat("FULL"), "DD.MM.YYYY H:I:S"), "d.m.Y H:i:s")) . "</pubDate>\n"; } else { $strRes .= "<pubDate>" . date("r") . "</pubDate>\n"; } } $strRes .= "</item>\n"; } $strRes .= "</channel>\n"; return $strRes; }
function GetList($arOrder = array("SORT" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array()) { /* Filter combinations: CHECK_PERMISSIONS="N" - check permissions of the current user to the infoblock MIN_PERMISSION="R" - when permissions check, then minimal access level SHOW_HISTORY="N" - add history items to list SHOW_NEW="N" - if not add history items, then add new, but not published elements */ global $DB, $USER, $APPLICATION; $MAX_LOCK = intval(COption::GetOptionString("workflow", "MAX_LOCK_TIME", "60")); $uid = is_object($USER) ? intval($USER->GetID()) : 0; $arIblockElementFields = array("ID" => "BE.ID", "TIMESTAMP_X" => $DB->DateToCharFunction("BE.TIMESTAMP_X"), "TIMESTAMP_X_UNIX" => 'UNIX_TIMESTAMP(BE.TIMESTAMP_X)', "MODIFIED_BY" => "BE.MODIFIED_BY", "DATE_CREATE" => $DB->DateToCharFunction("BE.DATE_CREATE"), "DATE_CREATE_UNIX" => 'UNIX_TIMESTAMP(BE.DATE_CREATE)', "CREATED_BY" => "BE.CREATED_BY", "IBLOCK_ID" => "BE.IBLOCK_ID", "IBLOCK_SECTION_ID" => "BE.IBLOCK_SECTION_ID", "ACTIVE" => "BE.ACTIVE", "ACTIVE_FROM" => CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "-") != "-" ? $DB->DateToCharFunction("BE.ACTIVE_FROM", CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "SHORT")) : "IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, " . $DB->DateToCharFunction("BE.ACTIVE_FROM", "FULL") . ", " . $DB->DateToCharFunction("BE.ACTIVE_FROM", "SHORT") . ")", "ACTIVE_TO" => CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "-") != "-" ? $DB->DateToCharFunction("BE.ACTIVE_TO", CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "SHORT")) : "IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, " . $DB->DateToCharFunction("BE.ACTIVE_TO", "FULL") . ", " . $DB->DateToCharFunction("BE.ACTIVE_TO", "SHORT") . ")", "DATE_ACTIVE_FROM" => CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "-") != "-" ? $DB->DateToCharFunction("BE.ACTIVE_FROM", CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "SHORT")) : "IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, " . $DB->DateToCharFunction("BE.ACTIVE_FROM", "FULL") . ", " . $DB->DateToCharFunction("BE.ACTIVE_FROM", "SHORT") . ")", "DATE_ACTIVE_TO" => CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "-") != "-" ? $DB->DateToCharFunction("BE.ACTIVE_TO", CPageOption::GetOptionString("iblock", "FORMAT_ACTIVE_DATES", "SHORT")) : "IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, " . $DB->DateToCharFunction("BE.ACTIVE_TO", "FULL") . ", " . $DB->DateToCharFunction("BE.ACTIVE_TO", "SHORT") . ")", "SORT" => "BE.SORT", "NAME" => "BE.NAME", "PREVIEW_PICTURE" => "BE.PREVIEW_PICTURE", "PREVIEW_TEXT" => "BE.PREVIEW_TEXT", "PREVIEW_TEXT_TYPE" => "BE.PREVIEW_TEXT_TYPE", "DETAIL_PICTURE" => "BE.DETAIL_PICTURE", "DETAIL_TEXT" => "BE.DETAIL_TEXT", "DETAIL_TEXT_TYPE" => "BE.DETAIL_TEXT_TYPE", "SEARCHABLE_CONTENT" => "BE.SEARCHABLE_CONTENT", "WF_STATUS_ID" => "BE.WF_STATUS_ID", "WF_PARENT_ELEMENT_ID" => "BE.WF_PARENT_ELEMENT_ID", "WF_LAST_HISTORY_ID" => "BE.WF_LAST_HISTORY_ID", "WF_NEW" => "BE.WF_NEW", "LOCK_STATUS" => "if (BE.WF_DATE_LOCK is null, 'green', if(DATE_ADD(BE.WF_DATE_LOCK, interval " . $MAX_LOCK . " MINUTE)<now(), 'green', if(BE.WF_LOCKED_BY=" . $uid . ", 'yellow', 'red')))", "WF_LOCKED_BY" => "BE.WF_LOCKED_BY", "WF_DATE_LOCK" => $DB->DateToCharFunction("BE.WF_DATE_LOCK"), "WF_COMMENTS" => "BE.WF_COMMENTS", "IN_SECTIONS" => "BE.IN_SECTIONS", "SHOW_COUNTER" => "BE.SHOW_COUNTER", "SHOW_COUNTER_START" => "BE.SHOW_COUNTER_START", "CODE" => "BE.CODE", "TAGS" => "BE.TAGS", "XML_ID" => "BE.XML_ID", "EXTERNAL_ID" => "BE.XML_ID", "TMP_ID" => "BE.TMP_ID", "USER_NAME" => "concat('(',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,''))", "LOCKED_USER_NAME" => "concat('(',UL.LOGIN,') ',ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,''))", "CREATED_USER_NAME" => "concat('(',UC.LOGIN,') ',ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,''))", "LANG_DIR" => "L.DIR", "LID" => "B.LID", "IBLOCK_TYPE_ID" => "B.IBLOCK_TYPE_ID", "IBLOCK_CODE" => "B.CODE", "IBLOCK_NAME" => "B.NAME", "IBLOCK_EXTERNAL_ID" => "B.XML_ID", "DETAIL_PAGE_URL" => "B.DETAIL_PAGE_URL", "LIST_PAGE_URL" => "B.LIST_PAGE_URL", "CREATED_DATE" => $DB->DateFormatToDB("YYYY.MM.DD", "BE.DATE_CREATE"), "BP_PUBLISHED" => "if(BE.WF_STATUS_ID = 1, 'Y', 'N')"); $bDistinct = false; CIBlockElement::PrepareGetList($arIblockElementFields, $arJoinProps, $bOnlyCount, $bDistinct, $arSelectFields, $sSelect, $arAddSelectFields, $arFilter, $sWhere, $sSectionWhere, $arAddWhereFields, $arGroupBy, $sGroupBy, $arOrder, $arSqlOrder, $arAddOrderByFields, $arIBlockFilter, $arIBlockMultProps, $arIBlockConvProps, $arIBlockAllProps, $arIBlockNumProps, $arIBlockLongProps); $arFilterIBlocks = isset($arFilter["IBLOCK_ID"]) ? array($arFilter["IBLOCK_ID"]) : array(); //******************FROM PART******************************************** $sFrom = ""; foreach ($arJoinProps["FPS"] as $iblock_id => $iPropCnt) { $sFrom .= "\t\t\tINNER JOIN b_iblock_element_prop_s" . $iblock_id . " FPS" . $iPropCnt . " ON FPS" . $iPropCnt . ".IBLOCK_ELEMENT_ID = BE.ID\n"; $arFilterIBlocks[$iblock_id] = $iblock_id; } foreach ($arJoinProps["FP"] as $propID => $db_prop) { $i = $db_prop["CNT"]; if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property FP" . $i . " ON FP" . $i . ".IBLOCK_ID = B.ID AND " . (IntVal($propID) > 0 ? " FP" . $i . ".ID=" . IntVal($propID) . "\n" : " FP" . $i . ".CODE='" . $DB->ForSQL($propID, 200) . "'\n"); } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property FP" . $i . " ON FP" . $i . ".IBLOCK_ID = B.ID AND " . (IntVal($propID) > 0 ? " FP" . $i . ".ID=" . IntVal($propID) . "\n" : " FP" . $i . ".CODE='" . $DB->ForSQL($propID, 200) . "'\n"); } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["FPV"] as $propID => $db_prop) { $i = $db_prop["CNT"]; if ($db_prop["MULTIPLE"] == "Y") { $bDistinct = true; } if ($db_prop["VERSION"] == 2) { $strTable = "b_iblock_element_prop_m" . $db_prop["IBLOCK_ID"]; } else { $strTable = "b_iblock_element_property"; } if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN " . $strTable . " FPV" . $i . " ON FPV" . $i . ".IBLOCK_PROPERTY_ID = FP" . $db_prop["JOIN"] . ".ID AND FPV" . $i . ".IBLOCK_ELEMENT_ID = BE.ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN " . $strTable . " FPV" . $i . " ON FPV" . $i . ".IBLOCK_PROPERTY_ID = FP" . $db_prop["JOIN"] . ".ID AND FPV" . $i . ".IBLOCK_ELEMENT_ID = BE.ID\n"; } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["FPEN"] as $propID => $db_prop) { $i = $db_prop["CNT"]; if ($db_prop["VERSION"] == 2 && $db_prop["MULTIPLE"] == "N") { if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property_enum FPEN" . $i . " ON FPEN" . $i . ".PROPERTY_ID = " . $db_prop["ORIG_ID"] . " AND FPS" . $db_prop["JOIN"] . ".PROPERTY_" . $db_prop["ORIG_ID"] . " = FPEN" . $i . ".ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property_enum FPEN" . $i . " ON FPEN" . $i . ".PROPERTY_ID = " . $db_prop["ORIG_ID"] . " AND FPS" . $db_prop["JOIN"] . ".PROPERTY_" . $db_prop["ORIG_ID"] . " = FPEN" . $i . ".ID\n"; } } else { if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property_enum FPEN" . $i . " ON FPEN" . $i . ".PROPERTY_ID = FPV" . $db_prop["JOIN"] . ".IBLOCK_PROPERTY_ID AND FPV" . $db_prop["JOIN"] . ".VALUE_ENUM = FPEN" . $i . ".ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property_enum FPEN" . $i . " ON FPEN" . $i . ".PROPERTY_ID = FPV" . $db_prop["JOIN"] . ".IBLOCK_PROPERTY_ID AND FPV" . $db_prop["JOIN"] . ".VALUE_ENUM = FPEN" . $i . ".ID\n"; } } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["BE"] as $propID => $db_prop) { $i = $db_prop["CNT"]; $sFrom .= "\t\t\tLEFT JOIN b_iblock_element BE" . $i . " ON BE" . $i . ".ID = " . ($db_prop["VERSION"] == 2 && $db_prop["MULTIPLE"] == "N" ? "FPS" . $db_prop["JOIN"] . ".PROPERTY_" . $db_prop["ORIG_ID"] : "FPV" . $db_prop["JOIN"] . ".VALUE_NUM") . ($arFilter["SHOW_HISTORY"] != "Y" ? " AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)" . ($arFilter["SHOW_NEW"] == "Y" ? " OR BE.WF_NEW='Y'" : "") . ")" : "") . "\n"; if ($db_prop["bJoinIBlock"]) { $sFrom .= "\t\t\tLEFT JOIN b_iblock B" . $i . " ON B" . $i . ".ID = BE" . $i . ".IBLOCK_ID\n"; } if ($db_prop["bJoinSection"]) { $sFrom .= "\t\t\tLEFT JOIN b_iblock_section BS" . $i . " ON BS" . $i . ".ID = BE" . $i . ".IBLOCK_SECTION_ID\n"; } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["BE_FPS"] as $iblock_id => $db_prop) { $sFrom .= "\t\t\tLEFT JOIN b_iblock_element_prop_s" . $iblock_id . " JFPS" . $db_prop["CNT"] . " ON JFPS" . $db_prop["CNT"] . ".IBLOCK_ELEMENT_ID = BE" . $db_prop["JOIN"] . ".ID\n"; if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["BE_FP"] as $propID => $db_prop) { $i = $db_prop["CNT"]; list($propID, $link) = explode("~", $propID, 2); if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property JFP" . $i . " ON JFP" . $i . ".IBLOCK_ID = BE" . $db_prop["JOIN"] . ".IBLOCK_ID AND " . (IntVal($propID) > 0 ? " JFP" . $i . ".ID=" . IntVal($propID) . "\n" : " JFP" . $i . ".CODE='" . $DB->ForSQL($propID, 200) . "'\n"); } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property JFP" . $i . " ON JFP" . $i . ".IBLOCK_ID = BE" . $db_prop["JOIN"] . ".IBLOCK_ID AND " . (IntVal($propID) > 0 ? " JFP" . $i . ".ID=" . IntVal($propID) . "\n" : " JFP" . $i . ".CODE='" . $DB->ForSQL($propID, 200) . "'\n"); } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["BE_FPV"] as $propID => $db_prop) { $i = $db_prop["CNT"]; list($propID, $link) = explode("~", $propID, 2); if ($db_prop["MULTIPLE"] == "Y") { $bDistinct = true; } if ($db_prop["VERSION"] == 2) { $strTable = "b_iblock_element_prop_m" . $db_prop["IBLOCK_ID"]; } else { $strTable = "b_iblock_element_property"; } if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN " . $strTable . " JFPV" . $i . " ON JFPV" . $i . ".IBLOCK_PROPERTY_ID = JFP" . $db_prop["JOIN"] . ".ID AND JFPV" . $i . ".IBLOCK_ELEMENT_ID = BE" . $db_prop["BE_JOIN"] . ".ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN " . $strTable . " JFPV" . $i . " ON JFPV" . $i . ".IBLOCK_PROPERTY_ID = JFP" . $db_prop["JOIN"] . ".ID AND JFPV" . $i . ".IBLOCK_ELEMENT_ID = BE" . $db_prop["BE_JOIN"] . ".ID\n"; } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } foreach ($arJoinProps["BE_FPEN"] as $propID => $db_prop) { $i = $db_prop["CNT"]; list($propID, $link) = explode("~", $propID, 2); if ($db_prop["VERSION"] == 2 && $db_prop["MULTIPLE"] == "N") { if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property_enum JFPEN" . $i . " ON JFPEN" . $i . ".PROPERTY_ID = " . $db_prop["ORIG_ID"] . " AND JFPS" . $db_prop["JOIN"] . ".PROPERTY_" . $db_prop["ORIG_ID"] . " = JFPEN" . $i . ".ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property_enum JFPEN" . $i . " ON JFPEN" . $i . ".PROPERTY_ID = " . $db_prop["ORIG_ID"] . " AND JFPS" . $db_prop["JOIN"] . ".PROPERTY_" . $db_prop["ORIG_ID"] . " = JFPEN" . $i . ".ID\n"; } } else { if ($db_prop["bFullJoin"]) { $sFrom .= "\t\t\tINNER JOIN b_iblock_property_enum JFPEN" . $i . " ON JFPEN" . $i . ".PROPERTY_ID = JFPV" . $db_prop["JOIN"] . ".IBLOCK_PROPERTY_ID AND JFPV" . $db_prop["JOIN"] . ".VALUE_ENUM = JFPEN" . $i . ".ID\n"; } else { $sFrom .= "\t\t\tLEFT JOIN b_iblock_property_enum JFPEN" . $i . " ON JFPEN" . $i . ".PROPERTY_ID = JFPV" . $db_prop["JOIN"] . ".IBLOCK_PROPERTY_ID AND JFPV" . $db_prop["JOIN"] . ".VALUE_ENUM = JFPEN" . $i . ".ID\n"; } } if ($db_prop["IBLOCK_ID"]) { $arFilterIBlocks[$db_prop["IBLOCK_ID"]] = $db_prop["IBLOCK_ID"]; } } if (strlen($arJoinProps["BES"])) { $sFrom .= "\t\t\t" . $arJoinProps["BES"] . "\n"; } if ($arJoinProps["RV"]) { $sFrom .= "\t\t\tLEFT JOIN b_rating_voting RV ON RV.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RV.ENTITY_ID = BE.ID\n"; } if ($arJoinProps["RVU"]) { $sFrom .= "\t\t\tLEFT JOIN b_rating_vote RVU ON RVU.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RVU.ENTITY_ID = BE.ID AND RVU.USER_ID = " . $uid . "\n"; } if ($arJoinProps["RVV"]) { $sFrom .= "\t\t\t" . ($arJoinProps["RVV"]["bFullJoin"] ? "INNER" : "LEFT") . " JOIN b_rating_vote RVV ON RVV.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RVV.ENTITY_ID = BE.ID\n"; } //******************END OF FROM PART******************************************** $bCatalogSort = false; if (count($arAddSelectFields) > 0 || count($arAddWhereFields) > 0 || count($arAddOrderByFields) > 0) { if (CModule::IncludeModule("catalog")) { $res_catalog = CCatalogProduct::GetQueryBuildArrays($arAddOrderByFields, $arAddWhereFields, $arAddSelectFields); if ($sGroupBy == "" && !$bOnlyCount && !(is_object($this) && isset($this->strField))) { $sSelect .= $res_catalog["SELECT"] . " "; } $sFrom .= str_replace("LEFT JOIN", "\n\t\t\tLEFT JOIN", $res_catalog["FROM"]) . "\n"; //$sWhere .= $res_catalog["WHERE"]." "; moved to MkFilter if (is_array($res_catalog["ORDER"]) && count($res_catalog["ORDER"])) { $bCatalogSort = true; foreach ($res_catalog["ORDER"] as $i => $val) { $arSqlOrder[$i] = $val; } } } } $i = array_search("CREATED_BY_FORMATTED", $arSelectFields); if ($i !== false) { if ($sSelect && $sGroupBy == "" && !$bOnlyCount && !(is_object($this) && isset($this->strField))) { $sSelect .= ",UC.NAME UC_NAME, UC.LAST_NAME UC_LAST_NAME, UC.SECOND_NAME UC_SECOND_NAME, UC.EMAIL UC_EMAIL, UC.ID UC_ID, UC.LOGIN UC_LOGIN"; } else { unset($arSelectFields[$i]); } } $sOrderBy = ""; foreach ($arSqlOrder as $i => $val) { if (strlen($val)) { if ($sOrderBy == "") { $sOrderBy = " ORDER BY "; } else { $sOrderBy .= ","; } $sOrderBy .= $val . " "; } } if (strlen(trim($sSelect)) <= 0) { $sSelect = "0 as NOP "; } $bDistinct = $bDistinct || isset($arFilter["INCLUDE_SUBSECTIONS"]) && $arFilter["INCLUDE_SUBSECTIONS"] == "Y"; if ($bDistinct) { $sSelect = str_replace("%%_DISTINCT_%%", "DISTINCT", $sSelect); } else { $sSelect = str_replace("%%_DISTINCT_%%", "", $sSelect); } $sFrom = "\n\t\t\tb_iblock B\n\t\t\tINNER JOIN b_lang L ON B.LID=L.LID\n\t\t\tINNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID\n\t\t\t" . ltrim($sFrom, "\t\n") . (in_array("USER_NAME", $arSelectFields) ? "\t\t\tLEFT JOIN b_user U ON U.ID=BE.MODIFIED_BY\n" : "") . (in_array("LOCKED_USER_NAME", $arSelectFields) ? "\t\t\tLEFT JOIN b_user UL ON UL.ID=BE.WF_LOCKED_BY\n" : "") . (in_array("CREATED_USER_NAME", $arSelectFields) || in_array("CREATED_BY_FORMATTED", $arSelectFields) ? "\t\t\tLEFT JOIN b_user UC ON UC.ID=BE.CREATED_BY\n" : "") . "\n\t\t"; $strSql = "\n\t\t\tFROM " . $sFrom . "\n\t\t\tWHERE 1=1 " . $sWhere . "\n\t\t\t" . $sGroupBy . "\n\t\t"; if (isset($this) && is_object($this) && isset($this->strField)) { $this->sFrom = $sFrom; $this->sWhere = $sWhere; return "SELECT " . $sSelect . $strSql; } if ($bOnlyCount) { $res = $DB->Query("SELECT " . $sSelect . $strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); $res = $res->Fetch(); return $res["CNT"]; } if (is_array($arNavStartParams)) { $nTopCount = intval($arNavStartParams["nTopCount"]); $nElementID = intval($arNavStartParams["nElementID"]); if ($nTopCount > 0) { $strSql = "SELECT " . $sSelect . $strSql . $sOrderBy . " LIMIT " . $nTopCount; $res = $DB->Query($strSql); } elseif ($nElementID > 0 && $sGroupBy == "" && $sOrderBy != "" && strpos($sSelect, "BE.ID") !== false && !$bCatalogSort) { $nPageSize = intval($arNavStartParams["nPageSize"]); if ($nPageSize > 0) { $DB->Query("SET @rank=0"); $DB->Query("\n\t\t\t\t\t\tSELECT @rank:=el1.rank\n\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\tSELECT @rank:=@rank+1 AS rank, el0.*\n\t\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\t\tSELECT " . $sSelect . $strSql . $sOrderBy . "\n\t\t\t\t\t\t\t) el0\n\t\t\t\t\t\t) el1\n\t\t\t\t\t\tWHERE el1.ID = " . $nElementID . "\n\t\t\t\t\t"); $DB->Query("SET @rank2=0"); $res = $DB->Query("\n\t\t\t\t\t\tSELECT *\n\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\tSELECT @rank2:=@rank2+1 AS RANK, el0.*\n\t\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\t\tSELECT " . $sSelect . $strSql . $sOrderBy . "\n\t\t\t\t\t\t\t) el0\n\t\t\t\t\t\t) el1\n\t\t\t\t\t\tWHERE el1.RANK between @rank-{$nPageSize} and @rank+{$nPageSize}\n\t\t\t\t\t"); } else { $DB->Query("SET @rank=0"); $res = $DB->Query("\n\t\t\t\t\t\tSELECT el1.*\n\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\tSELECT @rank:=@rank+1 AS RANK, el0.*\n\t\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\t\tSELECT " . $sSelect . $strSql . $sOrderBy . "\n\t\t\t\t\t\t\t) el0\n\t\t\t\t\t\t) el1\n\t\t\t\t\t\tWHERE el1.ID = " . $nElementID . "\n\t\t\t\t\t"); } } else { if ($sGroupBy == "") { $res_cnt = $DB->Query("SELECT COUNT(" . ($bDistinct ? "DISTINCT BE.ID" : "'x'") . ") as C " . $strSql); $res_cnt = $res_cnt->Fetch(); $cnt = $res_cnt["C"]; } else { $res_cnt = $DB->Query("SELECT 'x' " . $strSql); $cnt = $res_cnt->SelectedRowsCount(); } $strSql = "SELECT " . $sSelect . $strSql . $sOrderBy; $res = new CDBResult(); $res->NavQuery($strSql, $cnt, $arNavStartParams); } } else { $strSql = "SELECT " . $sSelect . $strSql . $sOrderBy; $res = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); } $res = new CIBlockResult($res); $res->SetIBlockTag($arFilterIBlocks); $res->arIBlockMultProps = $arIBlockMultProps; $res->arIBlockConvProps = $arIBlockConvProps; $res->arIBlockAllProps = $arIBlockAllProps; $res->arIBlockNumProps = $arIBlockNumProps; $res->arIBlockLongProps = $arIBlockLongProps; return $res; }
"TYPE" => "catalog", "SITE_ID" => SITE_ID, "ACTIVE" => "Y" ); $obCache = new CPHPCache(); if ($obCache->InitCache(36000, serialize($arFilter), "/iblock/menu")) { $arSectionsInfo = $obCache->GetVars(); } elseif ($obCache->StartDataCache()) { if (CModule::IncludeModule("iblock")) { $dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arFilter); $dbIBlock = new CIBlockResult($dbIBlock); $curIblockID = 0; if ($arIBlock = $dbIBlock->GetNext()) { $dbSections = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"]), false, array("ID", "SECTION_PAGE_URL", "PICTURE", "DESCRIPTION")); while($arSections = $dbSections->GetNext()) { $pictureSrc = CFile::GetFileArray($arSections["PICTURE"]); if ($pictureSrc) $arResizePicture = CFile::ResizeImageGet( $arSections["PICTURE"], array("width" => 240, 'height'=>700), BX_RESIZE_IMAGE_PROPORTIONAL, true );
/** * Returns an array with Information block fields or false if none found. * iblock have to be linked to the current site. * * @param string $lang Site identifier block linked to. * @param int $ID Numeric identifier of the iblock * @param string $type Type of iblock restrict search to. * * @return array */ function GetIBlockLang($lang, $ID, $type = "") { $res = CIBlock::GetList(array(), array("ID" => intval($ID), "TYPE" => $type, "LID" => $lang, "ACTIVE" => "Y")); if ($res) { $res = new CIBlockResult($res); return $res->GetNext(); } else { return false; } }
</div> <? if ($APPLICATION->GetProperty("CATALOG_COMPARE_LIST", false) == false && IsModuleInstalled('iblock')) { $arFilter = Array("TYPE"=>"catalog", "SITE_ID"=>SITE_ID); $obCache = new CPHPCache; if($obCache->InitCache(36000, serialize($arFilter), "/iblock/catalog/active")) { $arIBlocks = $obCache->GetVars(); } elseif(CModule::IncludeModule("iblock") && $obCache->StartDataCache()) { $arIBlocks = array(); $dbRes = CIBlock::GetList(Array(), $arFilter); $dbRes = new CIBlockResult($dbRes); if(defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache("/iblock/catalog/active"); while($arIBlock = $dbRes->GetNext()) { $CACHE_MANAGER->RegisterTag("iblock_id_".$arIBlock["ID"]); if($arIBlock["ACTIVE"] == "Y") $arIBlocks[$arIBlock["ID"]] = $arIBlock; } $CACHE_MANAGER->RegisterTag("iblock_id_new");
///////////////////////////////////////////////////////////////////// if ($REQUEST_METHOD == "POST" && $STEP > 1 && check_freetrix_sessid()) { //*****************************************************************// if ($STEP > 1) { //*****************************************************************// $arIBlockRes = CIBlock::GetList( array("sort" => "asc"), array( "ID" => $IBLOCK_ID, "MIN_PERMISSION" => "W" ) ); $arIBlockRes = new CIBlockResult($arIBlockRes); if ($IBLOCK_ID <= 0 || !($arIBlock = $arIBlockRes->GetNext())) $strError .= GetMessage("IBLOCK_ADM_EXP_NO_IBLOCK")."<br>"; if (strlen($strError) > 0) $STEP = 1; //*****************************************************************// } if ($STEP > 2) { //*****************************************************************// $csvFile = new CCSVData(); if ($fields_type != "F" && $fields_type != "R") $strError .= GetMessage("IBLOCK_ADM_EXP_NO_FORMAT")."<br>";
public static function GetList($arOrder = array("SORT" => "ASC"), $arFilter = array(), $bIncCnt = false, $arSelect = array(), $arNavStartParams = false) { global $DB, $USER, $USER_FIELD_MANAGER; if (!is_array($arOrder)) { $arOrder = array(); } if (isset($arFilter["IBLOCK_ID"]) && $arFilter["IBLOCK_ID"] > 0) { $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity("IBLOCK_" . $arFilter["IBLOCK_ID"] . "_SECTION", "BS.ID"); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); } else { foreach ($arFilter as $key => $val) { $res = CIBlock::MkOperationFilter($key); if (preg_match("/^UF_/", $res["FIELD"])) { trigger_error("arFilter parameter of the CIBlockSection::GetList contains user fields, but has no IBLOCK_ID field.", E_USER_WARNING); break; } } } $arJoinProps = array(); $bJoinFlatProp = false; $arSqlSearch = CIBlockSection::GetFilter($arFilter); $bCheckPermissions = !array_key_exists("CHECK_PERMISSIONS", $arFilter) || $arFilter["CHECK_PERMISSIONS"] !== "N"; $bIsAdmin = is_object($USER) && $USER->IsAdmin(); if ($bCheckPermissions && !$bIsAdmin) { $arSqlSearch[] = CIBlockSection::_check_rights_sql($arFilter["MIN_PERMISSION"]); } if (array_key_exists("PROPERTY", $arFilter)) { $val = $arFilter["PROPERTY"]; foreach ($val as $propID => $propVAL) { $res = CIBlock::MkOperationFilter($propID); $propID = $res["FIELD"]; $cOperationType = $res["OPERATION"]; if ($db_prop = CIBlockProperty::GetPropertyArray($propID, CIBlock::_MergeIBArrays($arFilter["IBLOCK_ID"], $arFilter["IBLOCK_CODE"]))) { $bSave = false; if (array_key_exists($db_prop["ID"], $arJoinProps)) { $iPropCnt = $arJoinProps[$db_prop["ID"]]; } elseif ($db_prop["VERSION"] != 2 || $db_prop["MULTIPLE"] == "Y") { $bSave = true; $iPropCnt = count($arJoinProps); } if (!is_array($propVAL)) { $propVAL = array($propVAL); } if ($db_prop["PROPERTY_TYPE"] == "N" || $db_prop["PROPERTY_TYPE"] == "G" || $db_prop["PROPERTY_TYPE"] == "E") { if ($db_prop["VERSION"] == 2 && $db_prop["MULTIPLE"] == "N") { $r = CIBlock::FilterCreate("FPS.PROPERTY_" . $db_prop["ORIG_ID"], $propVAL, "number", $cOperationType); $bJoinFlatProp = $db_prop["IBLOCK_ID"]; } else { $r = CIBlock::FilterCreate("FPV" . $iPropCnt . ".VALUE_NUM", $propVAL, "number", $cOperationType); } } else { if ($db_prop["VERSION"] == 2 && $db_prop["MULTIPLE"] == "N") { $r = CIBlock::FilterCreate("FPS.PROPERTY_" . $db_prop["ORIG_ID"], $propVAL, "string", $cOperationType); $bJoinFlatProp = $db_prop["IBLOCK_ID"]; } else { $r = CIBlock::FilterCreate("FPV" . $iPropCnt . ".VALUE", $propVAL, "string", $cOperationType); } } if (strlen($r) > 0) { if ($bSave) { $db_prop["iPropCnt"] = $iPropCnt; $arJoinProps[$db_prop["ID"]] = $db_prop; } $arSqlSearch[] = $r; } } } } $strSqlSearch = ""; foreach ($arSqlSearch as $r) { if (strlen($r) > 0) { $strSqlSearch .= "\n\t\t\t\tAND (" . $r . ") "; } } if (isset($obUserFieldsSql)) { $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $strSqlSearch .= "\n\t\t\t\tAND (" . $r . ") "; } } $strProp1 = ""; foreach ($arJoinProps as $propID => $db_prop) { if ($db_prop["VERSION"] == 2) { $strTable = "b_iblock_element_prop_m" . $db_prop["IBLOCK_ID"]; } else { $strTable = "b_iblock_element_property"; } $i = $db_prop["iPropCnt"]; $strProp1 .= "\n\t\t\t\tLEFT JOIN b_iblock_property FP" . $i . " ON FP" . $i . ".IBLOCK_ID=B.ID AND\n\t\t\t\t" . (IntVal($propID) > 0 ? " FP" . $i . ".ID=" . IntVal($propID) . " " : " FP" . $i . ".CODE='" . $DB->ForSQL($propID, 200) . "' ") . "\n\t\t\t\tLEFT JOIN " . $strTable . " FPV" . $i . " ON FP" . $i . ".ID=FPV" . $i . ".IBLOCK_PROPERTY_ID AND FPV" . $i . ".IBLOCK_ELEMENT_ID=BE.ID "; } if ($bJoinFlatProp) { $strProp1 .= "\n\t\t\t\tLEFT JOIN b_iblock_element_prop_s" . $bJoinFlatProp . " FPS ON FPS.IBLOCK_ELEMENT_ID = BE.ID\n\t\t\t"; } $arFields = array("ID" => "BS.ID", "CODE" => "BS.CODE", "XML_ID" => "BS.XML_ID", "EXTERNAL_ID" => "BS.XML_ID", "IBLOCK_ID" => "BS.IBLOCK_ID", "IBLOCK_SECTION_ID" => "BS.IBLOCK_SECTION_ID", "TIMESTAMP_X" => $DB->DateToCharFunction("BS.TIMESTAMP_X"), "TIMESTAMP_X_UNIX" => 'UNIX_TIMESTAMP(BS.TIMESTAMP_X)', "SORT" => "BS.SORT", "NAME" => "BS.NAME", "ACTIVE" => "BS.ACTIVE", "GLOBAL_ACTIVE" => "BS.GLOBAL_ACTIVE", "PICTURE" => "BS.PICTURE", "DESCRIPTION" => "BS.DESCRIPTION", "DESCRIPTION_TYPE" => "BS.DESCRIPTION_TYPE", "LEFT_MARGIN" => "BS.LEFT_MARGIN", "RIGHT_MARGIN" => "BS.RIGHT_MARGIN", "DEPTH_LEVEL" => "BS.DEPTH_LEVEL", "SEARCHABLE_CONTENT" => "BS.SEARCHABLE_CONTENT", "MODIFIED_BY" => "BS.MODIFIED_BY", "DATE_CREATE" => $DB->DateToCharFunction("BS.DATE_CREATE"), "DATE_CREATE_UNIX" => 'UNIX_TIMESTAMP(BS.DATE_CREATE)', "CREATED_BY" => "BS.CREATED_BY", "DETAIL_PICTURE" => "BS.DETAIL_PICTURE", "TMP_ID" => "BS.TMP_ID", "LIST_PAGE_URL" => "B.LIST_PAGE_URL", "SECTION_PAGE_URL" => "B.SECTION_PAGE_URL", "IBLOCK_TYPE_ID" => "B.IBLOCK_TYPE_ID", "IBLOCK_CODE" => "B.CODE", "IBLOCK_EXTERNAL_ID" => "B.XML_ID", "SOCNET_GROUP_ID" => "BS.SOCNET_GROUP_ID"); $arSqlSelect = array(); foreach ($arSelect as $field) { $field = strtoupper($field); if (array_key_exists($field, $arFields)) { $arSqlSelect[$field] = $arFields[$field] . " AS " . $field; } } if (array_key_exists("DESCRIPTION", $arSqlSelect)) { $arSqlSelect["DESCRIPTION_TYPE"] = $arFields["DESCRIPTION_TYPE"] . " AS DESCRIPTION_TYPE"; } if (array_key_exists("LIST_PAGE_URL", $arSqlSelect) || array_key_exists("SECTION_PAGE_URL", $arSqlSelect)) { $arSqlSelect["ID"] = $arFields["ID"] . " AS ID"; $arSqlSelect["CODE"] = $arFields["CODE"] . " AS CODE"; $arSqlSelect["EXTERNAL_ID"] = $arFields["EXTERNAL_ID"] . " AS EXTERNAL_ID"; $arSqlSelect["IBLOCK_TYPE_ID"] = $arFields["IBLOCK_TYPE_ID"] . " AS IBLOCK_TYPE_ID"; $arSqlSelect["IBLOCK_ID"] = $arFields["IBLOCK_ID"] . " AS IBLOCK_ID"; $arSqlSelect["IBLOCK_CODE"] = $arFields["IBLOCK_CODE"] . " AS IBLOCK_CODE"; $arSqlSelect["IBLOCK_EXTERNAL_ID"] = $arFields["IBLOCK_EXTERNAL_ID"] . " AS IBLOCK_EXTERNAL_ID"; $arSqlSelect["GLOBAL_ACTIVE"] = $arFields["GLOBAL_ACTIVE"] . " AS GLOBAL_ACTIVE"; //$arr["LANG_DIR"], } if (count($arSqlSelect)) { $sSelect = implode(",\n", $arSqlSelect); } else { $sSelect = "\n\t\t\t\tBS.*,\n\t\t\t\tB.LIST_PAGE_URL,\n\t\t\t\tB.SECTION_PAGE_URL,\n\t\t\t\tB.IBLOCK_TYPE_ID,\n\t\t\t\tB.CODE as IBLOCK_CODE,\n\t\t\t\tB.XML_ID as IBLOCK_EXTERNAL_ID,\n\t\t\t\tBS.XML_ID as EXTERNAL_ID,\n\t\t\t\t" . $DB->DateToCharFunction("BS.TIMESTAMP_X") . " as TIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("BS.DATE_CREATE") . " as DATE_CREATE\n\t\t\t"; } if (!$bIncCnt) { $strSelect = $sSelect . (isset($obUserFieldsSql) ? $obUserFieldsSql->GetSelect() : ""); $strSql = "\n\t\t\t\tFROM b_iblock_section BS\n\t\t\t\t\tINNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID\n\t\t\t\t\t" . (isset($obUserFieldsSql) ? $obUserFieldsSql->GetJoin("BS.ID") : "") . "\n\t\t\t\t" . (strlen($strProp1) > 0 ? "\tINNER JOIN b_iblock_section BSTEMP ON BSTEMP.IBLOCK_ID = BS.IBLOCK_ID\n\t\t\t\t\t\tLEFT JOIN b_iblock_section_element BSE ON BSE.IBLOCK_SECTION_ID=BSTEMP.ID\n\t\t\t\t\t\tLEFT JOIN b_iblock_element BE ON (BSE.IBLOCK_ELEMENT_ID=BE.ID\n\t\t\t\t\t\t\tAND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL )\n\t\t\t\t\t\t\tAND BE.IBLOCK_ID = BS.IBLOCK_ID\n\t\t\t\t\t" . ($arFilter["CNT_ALL"] == "Y" ? " OR BE.WF_NEW='Y' " : "") . ")\n\t\t\t\t\t" . ($arFilter["CNT_ACTIVE"] == "Y" ? " AND BE.ACTIVE='Y'\n\t\t\t\t\t\tAND (BE.ACTIVE_TO >= " . $DB->CurrentTimeFunction() . " OR BE.ACTIVE_TO IS NULL)\n\t\t\t\t\t\tAND (BE.ACTIVE_FROM <= " . $DB->CurrentTimeFunction() . " OR BE.ACTIVE_FROM IS NULL)" : "") . ")\n\t\t\t\t\t\t" . $strProp1 . " " : "") . "\n\t\t\t\tWHERE 1=1\n\t\t\t\t" . (strlen($strProp1) > 0 ? "\tAND BSTEMP.LEFT_MARGIN >= BS.LEFT_MARGIN\n\t\t\t\t\t\tAND BSTEMP.RIGHT_MARGIN <= BS.RIGHT_MARGIN " : "") . "\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t"; $strGroupBy = ""; } else { $strSelect = $sSelect . ",COUNT(DISTINCT BE.ID) as ELEMENT_CNT" . (isset($obUserFieldsSql) ? $obUserFieldsSql->GetSelect() : ""); $strSql = "\n\t\t\t\tFROM b_iblock_section BS\n\t\t\t\t\tINNER JOIN b_iblock B ON BS.IBLOCK_ID = B.ID\n\t\t\t\t\t" . (isset($obUserFieldsSql) ? $obUserFieldsSql->GetJoin("BS.ID") : "") . "\n\t\t\t\t" . ($arFilter["ELEMENT_SUBSECTIONS"] == "N" ? "\tLEFT JOIN b_iblock_section_element BSE ON BSE.IBLOCK_SECTION_ID=BS.ID " : "\tINNER JOIN b_iblock_section BSTEMP ON BSTEMP.IBLOCK_ID = BS.IBLOCK_ID\n\t\t\t\t\t\tLEFT JOIN b_iblock_section_element BSE ON BSE.IBLOCK_SECTION_ID=BSTEMP.ID ") . "\n\t\t\t\t\tLEFT JOIN b_iblock_element BE ON (BSE.IBLOCK_ELEMENT_ID=BE.ID\n\t\t\t\t\t\tAND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL )\n\t\t\t\t\t\tAND BE.IBLOCK_ID = BS.IBLOCK_ID\n\t\t\t\t" . ($arFilter["CNT_ALL"] == "Y" ? " OR BE.WF_NEW='Y' " : "") . ")\n\t\t\t\t" . ($arFilter["CNT_ACTIVE"] == "Y" ? " AND BE.ACTIVE='Y'\n\t\t\t\t\tAND (BE.ACTIVE_TO >= " . $DB->CurrentTimeFunction() . " OR BE.ACTIVE_TO IS NULL)\n\t\t\t\t\tAND (BE.ACTIVE_FROM <= " . $DB->CurrentTimeFunction() . " OR BE.ACTIVE_FROM IS NULL)" : "") . ")\n\t\t\t\t\t" . $strProp1 . "\n\t\t\t\tWHERE 1=1\n\t\t\t\t" . ($arFilter["ELEMENT_SUBSECTIONS"] == "N" ? "\t" : "\tAND BSTEMP.IBLOCK_ID = BS.IBLOCK_ID\n\t\t\t\t\t\tAND BSTEMP.LEFT_MARGIN >= BS.LEFT_MARGIN\n\t\t\t\t\t\tAND BSTEMP.RIGHT_MARGIN <= BS.RIGHT_MARGIN ") . "\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t"; $strGroupBy = "GROUP BY BS.ID, B.ID"; } $arSqlOrder = array(); foreach ($arOrder as $by => $order) { $by = strtolower($by); if (isset($arSqlOrder[$by])) { continue; } $order = strtolower($order); if ($order != "asc") { $order = "desc"; } if ($by == "id") { $arSqlOrder[$by] = " BS.ID " . $order . " "; } elseif ($by == "section") { $arSqlOrder[$by] = " BS.IBLOCK_SECTION_ID " . $order . " "; } elseif ($by == "name") { $arSqlOrder[$by] = " BS.NAME " . $order . " "; } elseif ($by == "code") { $arSqlOrder[$by] = " BS.CODE " . $order . " "; } elseif ($by == "active") { $arSqlOrder[$by] = " BS.ACTIVE " . $order . " "; } elseif ($by == "left_margin") { $arSqlOrder[$by] = " BS.LEFT_MARGIN " . $order . " "; } elseif ($by == "depth_level") { $arSqlOrder[$by] = " BS.DEPTH_LEVEL " . $order . " "; } elseif ($by == "sort") { $arSqlOrder[$by] = " BS.SORT " . $order . " "; } elseif ($by == "created") { $arSqlOrder[$by] = " BS.DATE_CREATE " . $order . " "; } elseif ($by == "created_by") { $arSqlOrder[$by] = " BS.CREATED_BY " . $order . " "; } elseif ($by == "modified_by") { $arSqlOrder[$by] = " BS.MODIFIED_BY " . $order . " "; } elseif ($bIncCnt && $by == "element_cnt") { $arSqlOrder[$by] = " ELEMENT_CNT " . $order . " "; } elseif (isset($obUserFieldsSql) && ($s = $obUserFieldsSql->GetOrder($by))) { $arSqlOrder[$by] = " " . $s . " " . $order . " "; } else { $by = "timestamp_x"; $arSqlOrder[$by] = " BS.TIMESTAMP_X " . $order . " "; } } if (count($arSqlOrder) > 0) { $strSqlOrder = "\n\t\t\t\tORDER BY " . implode(", ", $arSqlOrder); } else { $strSqlOrder = ""; } if (is_array($arNavStartParams)) { $nTopCount = intval($arNavStartParams["nTopCount"]); if ($nTopCount > 0) { $res = $DB->Query($DB->TopSql("SELECT DISTINCT " . $strSelect . $strSql . $strGroupBy . $strSqlOrder, $nTopCount)); } else { $res_cnt = $DB->Query("SELECT COUNT(DISTINCT BS.ID) as C " . $strSql); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $res->NavQuery("SELECT DISTINCT " . $strSelect . $strSql . $strGroupBy . $strSqlOrder, $res_cnt["C"], $arNavStartParams); } } else { $res = $DB->Query("SELECT DISTINCT " . $strSelect . $strSql . $strGroupBy . $strSqlOrder, false, "FILE: " . __FILE__ . "<br> LINE: " . __LINE__); } $res = new CIBlockResult($res); if (isset($arFilter["IBLOCK_ID"]) && $arFilter["IBLOCK_ID"] > 0) { $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("IBLOCK_" . $arFilter["IBLOCK_ID"] . "_SECTION")); $res->SetIBlockTag($arFilter["IBLOCK_ID"]); } return $res; }
$arAvailGroups[] = array("ID" => IntVal($ar_res["ID"]), "IBLOCK_SECTION_ID" => IntVal($ar_res["IBLOCK_SECTION_ID"]), "NAME" => $ar_res["NAME"]); } } $arSectionIDs = array(); foreach ($arAvailGroups as $key => $value) { $strTmpCat .= "<category id=\"" . $value["ID"] . "\"" . (IntVal($value["IBLOCK_SECTION_ID"]) > 0 ? " parentId=\"" . $value["IBLOCK_SECTION_ID"] . "\"" : "") . ">" . yandex_text2xml($value["NAME"], true) . "</category>\n"; $arSectionIDs[] = $value["ID"]; } //*****************************************// $filter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y"); if (!$bAllSections) { $filter["INCLUDE_SUBSECTIONS"] = "Y"; $filter["SECTION_ID"] = $arSectionIDs; } $res = CIBlockElement::GetList(array(), $filter, false, false, $arSelect); $db_acc = new CIBlockResult($res); $total_sum = 0; $is_exists = false; $cnt = 0; while ($arAcc = $db_acc->GetNext()) { $str_QUANTITY = IntVal($arAcc["CATALOG_QUANTITY"]); if ($str_QUANTITY <= 0) { $str_QUANTITY = 1; } $minPrice = 0; $minPriceRUR = 0; $minPriceGroup = 0; $minPriceCurrency = ""; for ($i = 0; $i < count($arPTypes); $i++) { if (strlen($arAcc["CATALOG_CURRENCY_" . $arPTypes[$i]]) <= 0) { continue;
function GetCatalogProductTable($IBLOCK, $SECT_ID = false, $arOrder = array("sort" => "asc"), $cnt = 0) { return false; $arFilter = array("IBLOCK_ID" => intval($IBLOCK), "ACTIVE" => "Y", "ACTIVE_DATE" => "Y"); if ($SECT_ID !== false) { $arFilter["SECTION_ID"] = intval($SECT_ID); } $res = CCatalogProduct::GetListEx($arOrder, $arFilter); $dbr = new CIBlockResult($res->result); if ($cnt > 0) { $dbr->NavStart($cnt); } return $dbr; }
if (strlen($strError) > 0) { ShowError($strError); return; } if ($arParams['IBLOCK_ID'] > 0) { $arrFilter["IBLOCK_ID"] = $arParams["IBLOCK_ID"]; //if(defined("BX_COMP_MANAGED_CACHE")) // $GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_".$arParams["IBLOCK_ID"]); $arFilter = array("ID" => $arParams['IBLOCK_ID'], "TYPE" => "catalog", "SITE_ID" => SITE_ID); $obCache = new CPHPCache(); if ($obCache->InitCache(36000, serialize($arFilter), "/iblock/catalog/top")) { $arIblock = $obCache->GetVars(); } else { $arIBlock = array(); $dbRes = CIBlock::GetList(array(), $arFilter); $dbRes = new CIBlockResult($dbRes); if (defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache("/iblock/catalog/top"); if ($arIBlock = $dbRes->GetNext()) { $CACHE_MANAGER->RegisterTag("iblock_id_" . $arParams["IBLOCK_ID"]); } $CACHE_MANAGER->EndTagCache(); } else { if (!($arIBlock = $dbRes->GetNext())) { $arIBlock = array(); } } $obCache->EndDataCache($arIBlock); } } else {
</div> <?php if (CModule::IncludeModule("iblock")) { $arFilter = array("ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y", "IBLOCK_ID" => $arParams["IBLOCK_ID"]); if (strlen($arResult["VARIABLES"]["SECTION_CODE"]) > 0) { $arFilter["=CODE"] = $arResult["VARIABLES"]["SECTION_CODE"]; } elseif ($arResult["VARIABLES"]["SECTION_ID"] > 0) { $arFilter["ID"] = $arResult["VARIABLES"]["SECTION_ID"]; } $obCache = new CPHPCache(); if ($obCache->InitCache(36000, serialize($arFilter), "/iblock/catalog")) { $arCurSection = $obCache->GetVars(); } else { $arCurSection = array(); $dbRes = CIBlockSection::GetList(array(), $arFilter, false, array("ID")); $dbRes = new CIBlockResult($dbRes); if (defined("BX_COMP_MANAGED_CACHE")) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache("/iblock/catalog"); if ($arCurSection = $dbRes->GetNext()) { $CACHE_MANAGER->RegisterTag("iblock_id_" . $arParams["IBLOCK_ID"]); } $CACHE_MANAGER->EndTagCache(); } else { if (!($arCurSection = $dbRes->GetNext())) { $arCurSection = array(); } } $obCache->EndDataCache($arCurSection); } }
} if (isset($arParams["IBLOCK_TYPE_ID"])) { $arFilter = array("TYPE" => $arParams["IBLOCK_TYPE_ID"], "SITE_ID" => SITE_ID); } else { if (!CModule::IncludeModule('catalog')) { $this->AbortResultCache(); return array(); } $dbRes = CCatalog::GetList(array(), array('LID' => SITE_ID)); $arFilter = array("ID" => array(), "SITE_ID" => SITE_ID); while ($arRes = $dbRes->Fetch()) { $arFilter["ID"][] = $arRes["IBLOCK_ID"]; } } $dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'DESC'), $arFilter); $dbIBlock = new CIBlockResult($dbIBlock); while ($arIBlock = $dbIBlock->GetNext()) { if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_" . $arIBlock["ID"]); } if ($arIBlock["ACTIVE"] == "Y") { $arResult["IBLOCK_LIST"][$arIBlock['ID']] = $arIBlock; } } if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_new"); } $this->EndResultCache(); } foreach ($arResult["IBLOCK_LIST"] as $arIBlock) { $aMenuLinksExt = $APPLICATION->IncludeComponent("bitrix:menu.sections", "", array("IS_SEF" => "Y", "SEF_BASE_URL" => "", "SECTION_PAGE_URL" => $arIBlock['SECTION_PAGE_URL'], "DETAIL_PAGE_URL" => $arIBlock['DETAIL_PAGE_URL'], "IBLOCK_TYPE" => $arIBlock['IBLOCK_TYPE_ID'], "IBLOCK_ID" => $arIBlock['ID'], "DEPTH_LEVEL" => "3", "CACHE_TYPE" => $arParams["CACHE_TYPE"], "CACHE_TIME" => $arParams["CACHE_TIME"]), false, array('HIDE_ICONS' => 'Y'));
/** * Processing request of the elements * * @param \CIBlockResult $element * @return array */ protected function processingElementsResult($element) { $arElement = $element; if ($this->arParams['RESULT_PROCESSING_MODE'] === 'EXTENDED') { $arElement = $element->GetFields(); $arElement['PROPS'] = $element->GetProperties(); } elseif (!empty($this->arParams['SELECT_PROPS'])) { foreach ($this->arParams['SELECT_PROPS'] as $propCode) { if (trim($propCode)) { $arProp = explode('.', $propCode); $propCode = array_shift($arProp); $propValue = $element['PROPERTY_' . $propCode . '_VALUE']; $propDescr = $element['PROPERTY_' . $propCode . '_DESCRIPTION']; if ($propValue) { $arElement['PROPS'][$propCode]['VALUE'] = $propValue; } if ($propDescr) { $arElement['PROPS'][$propCode]['DESCRIPTION'] = $propDescr; } if (!empty($arElement['PROPS'][$propCode])) { foreach ($arProp as $field) { $arElement['PROPS'][$propCode]['LINKED'][$field] = $element['PROPERTY_' . $propCode . '_' . $field]; } } } } } if ($arElement = $this->prepareElementsResult($arElement)) { return $arElement; } else { return false; } }
function GetIBlockLang($lang, $ID, $type = "") { $res = CIBlock::GetList(array("sort" => "asc"), array("ID" => IntVal($ID), "TYPE" => $type, "LID" => $lang, "ACTIVE" => "Y")); $res = new CIBlockResult($res); return $arRes = $res->GetNext(); }