public function ImportFromID($id = 0) { global $USER; if (!is_object($USER)) $USER = new CUser; $channel = CIChannelsRssRep::GetRssChannelById($id); if (!$channel) return; $arUrl = parse_url($channel['URL']); if (!array_key_exists('port', $arUrl)) $arUrl['port'] = 80; if (!array_key_exists('path', $arUrl)) $arUrl['path'] = ''; if (!array_key_exists('query', $arUrl)) $arUrl['query'] = ''; CModule::IncludeModule('iblock'); $rChannel = CIBlockRSS::GetNewsEx( $arUrl['host'], $arUrl['port'], $arUrl['path'], $arUrl['query'] ); $arChannel = CIBlockRSS::FormatArray($rChannel); $mapper = CIChannels::getRssMapperByID($channel['MAPPER']); $ins = new $mapper['class']; foreach ($arChannel['item'] as $item) { $arFields = $ins->{$mapper['method']}($item, $channel); if (empty ($arFields)) continue; $arFields['ACTIVE'] = 'Y'; $arFields['IBLOCK_TYPE_ID'] = $channel['IBLOCK_TYPE_ID']; $arFields['IBLOCK_ID'] = $channel['IBLOCK_ID']; if ($channel['IBLOCK_SECTION_ID'] != '0') { $arFields['IBLOCK_SECTION_ID'] = $channel['IBLOCK_SECTION_ID']; } $iblockElement = new CIBlockElement(); $iNewElementID = $iblockElement->Add($arFields); } return sprintf('%s(%d);', __METHOD__, $id); }
?> <img src="<?php echo $arItem["enclosure"]["url"]; ?> " alt="<?php echo $arItem["enclosure"]["url"]; ?> " /><br /> <?php } ?> <?php if (strlen($arItem["pubDate"]) > 0) { ?> <p><?php echo CIBlockRSS::XMLDate2Dec($arItem["pubDate"], FORMAT_DATE); ?> </p> <?php } ?> <?php if (strlen($arItem["link"]) > 0) { ?> <a href="<?php echo $arItem["link"]; ?> "><?php echo $arItem["title"]; ?> </a>
function GetRSS($ID, $LANG, $TYPE, $LIMIT_NUM = false, $LIMIT_DAY = false, $yandex = false) { echo "<"."?xml version=\"1.0\" encoding=\"".LANG_CHARSET."\"?".">\n"; echo "<rss version=\"2.0\""; echo ">\n"; $dbr = CIBlock::GetList(array(), array( "type" => $TYPE, "LID" => $LANG, "ACTIVE" => "Y", "ID" => $ID, )); $arIBlock = $dbr->Fetch(); if ($arIBlock && ($arIBlock["RSS_ACTIVE"] == "Y")) { echo CIBlockRSS::GetRSSText($arIBlock, $LIMIT_NUM, $LIMIT_DAY, $yandex); } echo "</rss>\n"; }
function PreGenerateRSS($IBLOCK_ID, $yandex = true) { global $DB; $strSql = "SELECT DISTINCT B.*, C.CHARSET, S.SERVER_NAME, " . $DB->DateToCharFunction("B.TIMESTAMP_X") . " as TIMESTAMP_X " . "FROM b_iblock B LEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID " . "\tLEFT JOIN b_lang S ON S.LID=B.LID " . "\tLEFT JOIN b_culture C ON C.ID=S.CULTURE_ID " . "WHERE B.ID = " . IntVal($IBLOCK_ID) . "\tAND IBG.GROUP_ID IN (2) " . "\tAND IBG.PERMISSION>='R'" . "\tAND (IBG.PERMISSION='X' OR B.ACTIVE='Y')"; $dbr = $DB->Query($strSql); $bAccessable = False; if (($arIBlock = $dbr->GetNext()) && ($arIBlock["RSS_FILE_ACTIVE"] == "Y" && !$yandex || $arIBlock["RSS_YANDEX_ACTIVE"] == "Y" && $yandex)) { $bAccessable = True; } if (!$bAccessable) { return ""; } $strRes = ""; $strRes .= "<" . "?xml version=\"1.0\" encoding=\"" . $arIBlock["CHARSET"] . "\"?" . ">\n"; $strRes .= "<rss version=\"2.0\""; // $strRes .= "<rss version=\"2.0\" xmlns=\"http://backend.userland.com/rss2\""; if ($yandex) { $strRes .= " xmlns:yandex=\"http://news.yandex.ru\""; } $strRes .= ">\n"; $limit_num = false; $limit_day = 2; if (!$yandex) { $limit_num = false; if (strlen($arIBlock["RSS_FILE_LIMIT"]) > 0 && IntVal($arIBlock["RSS_FILE_LIMIT"]) > 0) { $limit_num = IntVal($arIBlock["RSS_FILE_LIMIT"]); } $limit_day = false; if (strlen($arIBlock["RSS_FILE_DAYS"]) > 0 && IntVal($arIBlock["RSS_FILE_DAYS"]) > 0) { $limit_day = IntVal($arIBlock["RSS_FILE_DAYS"]); } } $strRes .= CIBlockRSS::GetRSSText($arIBlock, $limit_num, $limit_day, $yandex); $strRes .= "</rss>\n"; $rss_file = $_SERVER["DOCUMENT_ROOT"] . COption::GetOptionString("iblock", "path2rss", "/upload/"); if ($yandex) { $rss_file .= "yandex_rss_" . IntVal($arIBlock["ID"]) . ".xml"; } else { $rss_file .= "iblock_rss_" . IntVal($arIBlock["ID"]) . ".xml"; } $fp = fopen($rss_file, "w"); fwrite($fp, $strRes); fclose($fp); global $pPERIOD; $pPERIOD = IntVal($arIBlock["RSS_TTL"]) * 60 * 60; return "CIBlockRSS::PreGenerateRSS(" . $IBLOCK_ID . ", " . ($yandex ? "true" : "false") . ");"; }
if (strlen($arResult["SERVER_NAME"]) <= 0 && defined("SITE_SERVER_NAME")) { $arResult["SERVER_NAME"] = SITE_SERVER_NAME; } if (strlen($arResult["SERVER_NAME"]) <= 0 && defined("SITE_SERVER_NAME")) { $b = "sort"; $o = "asc"; $rsSite = CSite::GetList($b, $o, array("LID" => $arResult["LID"])); if ($arSite = $rsSite->Fetch()) { $arResult["SERVER_NAME"] = $arSite["SERVER_NAME"]; } } if (strlen($arResult["SERVER_NAME"]) <= 0) { $arResult["SERVER_NAME"] = COption::GetOptionString("main", "server_name", "www.bitrixsoft.com"); } $arResult["PICTURE"] = CFile::GetFileArray($arResult["PICTURE"]); $arResult["NODES"] = CIBlockRSS::GetNodeList($arResult["ID"]); $arSelect = array("ID", "CODE", "XML_ID", "IBLOCK_ID", "NAME", "SORT", "DETAIL_PAGE_URL", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_SECTION_ID", "DATE_ACTIVE_FROM", "ACTIVE_FROM", "DATE_ACTIVE_TO", "ACTIVE_TO", "SHOW_COUNTER", "SHOW_COUNTER_START", "IBLOCK_TYPE_ID", "IBLOCK_CODE", "IBLOCK_EXTERNAL_ID", "DATE_CREATE", "CREATED_BY", "TIMESTAMP_X", "MODIFIED_BY", "PROPERTY_*"); $arFilter = array("ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y"); if ($arParams["CHECK_DATES"]) { $arFilter["ACTIVE_DATE"] = "Y"; } if (array_key_exists("SECTION", $arResult)) { $arFilter["SECTION_ID"] = $arResult["SECTION"]["ID"]; if ($arParams["INCLUDE_SUBSECTIONS"]) { $arFilter["INCLUDE_SUBSECTIONS"] = "Y"; } } else { $arFilter["IBLOCK_ID"] = $arResult["ID"]; } if ($arParams["NUM_DAYS"] > 0) { $arFilter["ACTIVE_FROM"] = date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(date("H"), date("i"), date("s"), date("m"), date("d") - IntVal($arParams["NUM_DAYS"]), date("Y")));
<tr> <td colspan="2" align="center"> <table class="internal"> <tr class="heading"> <td><?php echo GetMessage("IB_E_RSS_FIELD"); ?> </td> <td><?php echo GetMessage("IB_E_RSS_TEMPL"); ?> </td> </tr> <?php $arCurNodesRSS = CIBlockRSS::GetNodeList(IntVal($ID)); $arNodesRSS = CIBlockRSS::GetRSSNodes(); foreach ($arNodesRSS as $key => $val) { if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_iblock_rss", "RSS_", "str_RSS_", "_" . $key); } ?> <tr> <td> <input type="text" size="20" readonly maxlength="50" name="RSS_NODE_<?php echo $key; ?> " value="<?php echo $val; ?> "> </td>
$arParams["QUERY_STR"] = $ar["query"]; } } else { $arParams["SITE"] = trim($arParams["SITE"]); $arParams["PORT"] = intval($arParams["PORT"]); $arParams["PATH"] = trim($arParams["PATH"]); $arParams["QUERY_STR"] = trim($arParams["QUERY_STR"]); } $arParams["OUT_CHANNEL"] = $arParams["OUT_CHANNEL"] == "Y"; $arParams["NUM_NEWS"] = intval($arParams["NUM_NEWS"]); if ($arParams["PROCESS"] != "QUOTE" && $arParams["PROCESS"] != "TEXT") { $arParams["PROCESS"] = "NONE"; } /************************************************************************* Start caching *************************************************************************/ if ($this->StartResultCache()) { $arResult = CIBlockRSS::GetNewsEx($arParams["SITE"], $arParams["PORT"], $arParams["PATH"], $arParams["QUERY_STR"], $arParams["OUT_CHANNEL"]); $arResult = CIBlockRSS::FormatArray($arResult, $arParams["OUT_CHANNEL"]); if ($arParams["NUM_NEWS"] > 0) { while (count($arResult["item"]) > $arParams["NUM_NEWS"]) { array_pop($arResult["item"]); } } if ($arParams["PROCESS"] == "QUOTE") { array_walk_recursive($arResult, create_function('&$val, $key', '$val=htmlspecialcharsex($val);')); } elseif ($arParams["PROCESS"] == "TEXT") { array_walk_recursive($arResult, create_function('&$val, $key', '$val=str_replace(array(" ", "\\r\\n"), array(" ", "<br>"), HTMLToTxt($val));')); } $this->IncludeComponentTemplate(); }
$this->IncludeComponentTemplate(); } else { $this->AbortResultCache(); ShowError(GetMessage("PHOTO_ELEMENT_NOT_FOUND")); @define("ERROR_404", "Y"); if ($arParams["SET_STATUS_404"] === "Y") { CHTTP::SetStatus("404 Not Found"); } } } if (array_key_exists("AJAX", $arResult) && $_REQUEST["AJAX_CALL"] != "Y") { //13* //Сохраняем в БД кеш if (!is_array($_SESSION["iblock.vote"])) { $_SESSION["iblock.vote"] = array(); } if (!array_key_exists($arResult["AJAX"]["SESSION_KEY"], $_SESSION["iblock.vote"])) { $arCache = CIBlockRSS::GetCache($arResult["AJAX"]["SESSION_KEY"]); if (!$arCache || $arCache["VALID"] != "Y") { CIBlockRSS::UpdateCache($arResult["AJAX"]["SESSION_KEY"], serialize($arResult["AJAX"]["SESSION_PARAMS"]), 24 * 30, is_array($arCache)); } $_SESSION["iblock.vote"][$arResult["AJAX"]["SESSION_KEY"]] = true; } if (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true) { //14* //Подключаем поддержку (библиотеку) IncludeAJAX(); } //15* //Продолжение экскурсии в файле jscript.php }
$APPLICATION->RestartBuffer(); header("Content-Type: text/xml"); header("Pragma: no-cache"); if ($CACHE_TIME > 0 && $cache->InitCache($CACHE_TIME, $cache_id, "/iblock/rss_out/")) { $cache->Output(); } else { if ($CACHE_TIME > 0) { $cache->StartDataCache($CACHE_TIME, $cache_id, "/iblock/rss_out/"); } $db_res_iblock = CIBlock::GetList(array(), array("ACTIVE" => "Y", "ID" => $ID)); $bAccessable = False; if (($arIBlock = $db_res_iblock->Fetch()) && $arIBlock["RSS_ACTIVE"] == "Y") { $bAccessable = True; } echo "<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\n"; echo "<rss version=\"2.0\""; if ($bYandex) { echo " xmlns:yandex=\"http://news.yandex.ru\""; } echo ">\n"; if ($bAccessable) { echo CIBlockRSS::GetRSSText($arIBlock, $NUM_NEWS, $NUM_DAYS, $bYandex); } echo "</rss>\n"; if ($CACHE_TIME > 0) { $cache->EndDataCache(array()); } } die; //******************************************************* }
<?php define("ADMIN_SECTION", true); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; header("Content-Type: text/xml"); CModule::IncludeModule("iblock"); if (IntVal($ID) > 0) { $ID = IntVal($ID); } else { $ID = Trim($ID); } $LANG = Trim($_REQUEST["LANG"]); $TYPE = Trim($TYPE); $LIMIT = IntVal($LIMIT); CIBlockRSS::GetRSS($ID, $LANG, $TYPE, $LIMIT, false, false);
function GetRSS($ID, $LANG, $TYPE, $LIMIT_NUM = false, $LIMIT_DAY = false, $yandex = false) { $dbr = GetIBlockListLang($LANG, $TYPE, array($ID)); $bAccessable = False; if (($arIBlock = $dbr->GetNext()) && $arIBlock["RSS_ACTIVE"] == "Y") { $bAccessable = True; } echo "<" . "?xml version=\"1.0\" encoding=\"" . LANG_CHARSET . "\"?" . ">\n"; echo "<rss version=\"2.0\""; // echo "<rss version=\"2.0\" xmlns=\"http://backend.userland.com/rss2\""; // if ($yandex) echo " xmlns:yandex=\"http://news.yandex.ru\""; echo ">\n"; if ($bAccessable) { echo CIBlockRSS::GetRSSText($arIBlock, $LIMIT_NUM, $LIMIT_DAY, $yandex); } echo "</rss>\n"; }