27 public static function UpdateCache($cacheKey, $CACHE, $HOURS_CACHE, $bCACHED)
33 if(is_array($HOURS_CACHE) && array_key_exists(
"minutes", $HOURS_CACHE))
34 $TTL = intval($HOURS_CACHE[
"minutes"]) * 60;
36 $TTL = intval($HOURS_CACHE) * 3600;
41 "UPDATE b_iblock_cache SET ".
42 " CACHE = '".
$DB->ForSql($CACHE, 0).
"', ".
43 " CACHE_DATE = " . $helper->addSecondsToDateTime(intval($TTL)) .
44 " WHERE CACHE_KEY = '".
$DB->ForSql($cacheKey, 0).
"' ");
49 "INSERT INTO b_iblock_cache (CACHE_KEY, CACHE, CACHE_DATE) ".
50 "VALUES('".
$DB->ForSql($cacheKey, 0).
"', '".
$DB->ForSql($CACHE, 0).
"', " . $helper->addSecondsToDateTime(intval($TTL)) .
") ");
52 $db_res =
$DB->Query(
"DELETE from b_iblock_cache WHERE CACHE_DATE < " . $helper->getCurrentDateTimeFunction());
55 public static function GetRSSText($arIBLOCK, $LIMIT_NUM =
false, $LIMIT_DAY =
false, $yandex =
false)
61 $protocol = \Bitrix\Main\Context::getCurrent()->getRequest()->isHttps() ?
'https://' :
'http://';
65 if (isset($arIBLOCK[
"SERVER_NAME"]) && $arIBLOCK[
"SERVER_NAME"] <>
'')
66 $serverName = $arIBLOCK[
"SERVER_NAME"];
68 if ($serverName ==
'' && !isset($arIBLOCK[
"SERVER_NAME"]))
70 $dbSite = CSite::GetList(
'',
'',
array(
"LID" => $arIBLOCK[
"LID"]));
71 if ($arSite = $dbSite->Fetch())
72 $serverName = $arSite[
"SERVER_NAME"];
75 if ($serverName ==
'')
77 if (defined(
"SITE_SERVER_NAME") && SITE_SERVER_NAME <>
'')
78 $serverName = SITE_SERVER_NAME;
80 $serverName = COption::GetOptionString(
"main",
"server_name");
83 $strRes .=
"<channel>\n";
84 $strRes .=
"<title>".htmlspecialcharsbx($arIBLOCK[
"NAME"]).
"</title>\n";
85 $strRes .=
"<link>".$protocol.htmlspecialcharsbx($serverName).
"</link>\n";
86 $strRes .=
"<description>".htmlspecialcharsbx($arIBLOCK[
"DESCRIPTION"]).
"</description>\n";
87 $strRes .=
"<lastBuildDate>".date(
"r").
"</lastBuildDate>\n";
88 $strRes .=
"<ttl>".$arIBLOCK[
"RSS_TTL"].
"</ttl>\n";
90 $db_img_arr = CFile::GetFileArray($arIBLOCK[
"PICTURE"]);
93 if(mb_substr($db_img_arr[
"SRC"], 0, 1) ==
"/")
94 $strImage =
$protocol.$serverName.$db_img_arr[
"SRC"];
96 $strImage = $db_img_arr[
"SRC"];
100 $strRes .=
"<yandex:logo>".htmlspecialcharsbx($strImage).
"</yandex:logo>\n";
101 $squareSize = min($db_img_arr[
"WIDTH"], $db_img_arr[
"HEIGHT"]);
104 $squarePicture = CFile::ResizeImageGet(
106 array(
"width" => $squareSize,
"height" => $squareSize),
111 if(mb_substr($squarePicture[
"src"], 0, 1) ==
"/")
112 $squareImage =
$protocol.$serverName.$squarePicture[
"src"];
114 $squareImage = $squarePicture[
"src"];
115 $strRes .=
"<yandex:logo type=\"square\">".htmlspecialcharsbx($squareImage).
"</yandex:logo>\n";
121 $strRes .=
"<image>\n";
122 $strRes .=
"<title>".htmlspecialcharsbx($arIBLOCK[
"NAME"]).
"</title>\n";
123 $strRes .=
"<url>".htmlspecialcharsbx($strImage).
"</url>\n";
124 $strRes .=
"<link>".$protocol.htmlspecialcharsbx($serverName).
"</link>\n";
125 $strRes .=
"<width>".$db_img_arr[
"WIDTH"].
"</width>\n";
126 $strRes .=
"<height>".$db_img_arr[
"HEIGHT"].
"</height>\n";
127 $strRes .=
"</image>\n";
132 $db_res =
$DB->Query(
"SELECT NODE, NODE_VALUE FROM b_iblock_rss WHERE IBLOCK_ID = ".intval($arIBLOCK[
"ID"]));
133 while ($db_res_arr =
$db_res->Fetch())
135 $arNodes[$db_res_arr[
"NODE"]] = $db_res_arr[
"NODE_VALUE"];
141 $nav = $LIMIT_NUM > 0?
array(
"nTopCount" => $LIMIT_NUM):
false;
144 "IBLOCK_ID" => $arIBLOCK[
"ID"],
145 "ACTIVE_DATE" =>
"Y",
148 if ($LIMIT_DAY !==
false)
150 $date = new \Bitrix\Main\Type\DateTime();
151 $date->add(
"- $LIMIT_DAY days");
152 $arFilter[
"ACTIVE_FROM"] = $date->toString();
155 CTimeZone::Disable();
156 $items = CIBlockElement::GetList(
array(
"ACTIVE_FROM"=>
"DESC",
"SORT"=>
"ASC",
"ID"=>
"DESC"),
$arFilter,
false, $nav);
161 while ($arItem =
$items->GetNext())
163 $props = CIBlockElement::GetProperty($arIBLOCK[
"ID"], $arItem[
"ID"],
"sort",
"asc", Array(
"ACTIVE"=>
"Y",
"NON_EMPTY"=>
"Y"));
165 while ($arProp =
$props->Fetch())
167 if ($arProp[
"CODE"] <>
'')
168 $arProps[$arProp[
"CODE"]] = Array(
"NAME"=>
htmlspecialcharsbx($arProp[
"NAME"]),
"VALUE"=>htmlspecialcharsex($arProp[
"VALUE"]));
170 $arProps[$arProp[
"ID"]] = Array(
"NAME"=>
htmlspecialcharsbx($arProp[
"NAME"]),
"VALUE"=>htmlspecialcharsex($arProp[
"VALUE"]));
173 $arLinkProp = $arProps[
"DOC_LINK"];
175 $strRes .=
"<item>\n";
176 if ($arNodes[
"title"] <>
'')
182 $strRes .=
"<title>".htmlspecialcharsbx($arItem[
"~NAME"]).
"</title>\n";
184 if ($arNodes[
"link"] <>
'')
186 $strRes .=
"<link>".CIBlockRSS::ExtractProperties($arNodes[
"link"], $arProps, $arItem).
"</link>\n";
190 $strRes .=
"<link>".$protocol.htmlspecialcharsbx($serverName).(($arLinkProp[
"VALUE"]) ? $arLinkProp[
"VALUE"] : $arItem[
"DETAIL_PAGE_URL"]).
"</link>\n";
192 if ($arNodes[
"description"] <>
'')
198 $strRes .=
"<description>".(($arItem[
"PREVIEW_TEXT"] || $yandex) ?
htmlspecialcharsbx($arItem[
"PREVIEW_TEXT"]) :
htmlspecialcharsbx($arItem[
"DETAIL_TEXT"])).
"</description>\n";
200 if ($arNodes[
"enclosure"] <>
'')
206 $db_img_arr = CFile::GetFileArray($arItem[
"PREVIEW_PICTURE"]);
209 if(mb_substr($db_img_arr[
"SRC"], 0, 1) ==
"/")
210 $strImage =
$protocol.$serverName.$db_img_arr[
"SRC"];
212 $strImage = $db_img_arr[
"SRC"];
214 $strRes .=
"<enclosure url=\"".htmlspecialcharsbx($strImage).
"\" length=\"".$db_img_arr[
"FILE_SIZE"].
"\" type=\"".$db_img_arr[
"CONTENT_TYPE"].
"\" width=\"".$db_img_arr[
"WIDTH"].
"\" height=\"".$db_img_arr[
"HEIGHT"].
"\"/>\n";
217 if ($arNodes[
"category"] <>
'')
224 $nav = CIBlockSection::GetNavChain(
226 $arItem[
"IBLOCK_SECTION_ID"],
233 foreach ($nav as $ar_nav)
235 $strPath .= $ar_nav[
"NAME"].
"/";
237 unset($ar_nav, $nav);
240 $strRes .=
"<category>".htmlspecialcharsbx($strPath).
"</category>\n";
245 $strRes .=
"<yandex:full-text>".htmlspecialcharsbx($arItem[
"DETAIL_TEXT"]).
"</yandex:full-text>\n";
247 if ($arNodes[
"pubDate"] <>
'')
253 if ($arItem[
"ACTIVE_FROM"] <>
'')
255 $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";
259 $strRes .=
"<pubDate>".date(
"r").
"</pubDate>\n";
262 $strRes .=
"</item>\n";
264 $strRes .=
"</channel>\n";
273 $protocol = \Bitrix\Main\Context::getCurrent()->getRequest()->isHttps() ?
'https://' :
'http://';
276 "SELECT DISTINCT B.*, C.CHARSET, S.SERVER_NAME, ".$DB->DateToCharFunction(
"B.TIMESTAMP_X").
" as TIMESTAMP_X ".
277 "FROM b_iblock B LEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID ".
278 " LEFT JOIN b_lang S ON S.LID=B.LID ".
279 " LEFT JOIN b_culture C ON C.ID=S.CULTURE_ID ".
281 " AND IBG.GROUP_ID IN (2) ".
282 " AND IBG.PERMISSION>='R'".
283 " AND (IBG.PERMISSION='X' OR B.ACTIVE='Y')";
284 $dbr =
$DB->Query($strSql);
285 $bAccessable = False;
286 if ((
$arIBlock = $dbr->GetNext()) && (
$arIBlock[
"RSS_FILE_ACTIVE"]==
"Y" && !$yandex ||
$arIBlock[
"RSS_YANDEX_ACTIVE"]==
"Y" && $yandex))
289 if (!$bAccessable)
return "";
292 $strRes .=
"<".
"?xml version=\"1.0\" encoding=\"".
$arIBlock[
"CHARSET"].
"\"?".
">\n";
293 $strRes .=
"<rss version=\"2.0\"";
297 $strRes .=
' xmlns:yandex="'.$protocol.
'news.yandex.ru"';
307 $limit_num = intval(
$arIBlock[
"RSS_FILE_LIMIT"]);
311 $limit_day = intval(
$arIBlock[
"RSS_FILE_DAYS"]);
315 $strRes .=
"</rss>\n";
317 $rss_file =
$_SERVER[
"DOCUMENT_ROOT"].COption::GetOptionString(
"iblock",
"path2rss",
"/upload/");
319 $rss_file .=
"yandex_rss_".intval(
$arIBlock[
"ID"]).
".xml";
321 $rss_file .=
"iblock_rss_".intval(
$arIBlock[
"ID"]).
".xml";
322 $fp = fopen($rss_file,
"w");
323 fwrite($fp, $strRes);
327 $pPERIOD = intval(
$arIBlock[
"RSS_TTL"])*60*60;
328 return "CIBlockRSS::PreGenerateRSS(".$IBLOCK_ID.
", ".($yandex?
"true":
"false").
");";