Пошаговая инструкция интеграция сайта на 1С-Битрикс и Яндекс.Дзен
1) В корне сайта (там где папка bitrix) добавляем папку dzen2) В папке dzen создаем файл rss.php
В файл добавляем следующий код
Не забудьте заменить данные на свои
3) Саму ссылку на rss файл https://ВашСайт/dzen/rss.php вставьте в личный кабинет яндекс дзена
Добавить в файл rss.php
<?php
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("DisableEventsCheck", true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
use Bitrix\Main\Loader;
if (!Loader::includeModule('iblock')) {
http_response_code(500);
die('iblock not loaded');
}
header('Content-Type: application/rss+xml; charset=UTF-8');
$site = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER['HTTP_HOST'];
// Настройки
$IBLOCK_ID = 38; // <-- поменяйте
$LIMIT = 100; // обычно 10..500, лучше 50-200
$CHANNEL_TITLE = "Правильные сайты - это продающие сайты";
$CHANNEL_LINK = $site . "/";
$CHANNEL_DESC = "Блог компании Правильные сайты";
// Берем последние материалы (можно заменить на "за последние 3 дня" при желании)
$arSelect = [
"ID", "IBLOCK_ID", "NAME",
"DETAIL_PAGE_URL",
"DATE_ACTIVE_FROM",
"PREVIEW_TEXT", "DETAIL_TEXT",
"PREVIEW_PICTURE", "DETAIL_PICTURE",
"TAGS",
];
$arFilter = [
"IBLOCK_ID" => $IBLOCK_ID,
"ACTIVE" => "Y",
"ACTIVE_DATE" => "Y",
];
$res = CIBlockElement::GetList(
["DATE_ACTIVE_FROM" => "DESC", "ID" => "DESC"],
$arFilter,
false,
["nTopCount" => $LIMIT],
$arSelect
);
// helpers
$xmlEscape = function($s) {
return htmlspecialcharsbx((string)$s, ENT_QUOTES | ENT_XML1);
};
$absUrl = function($url) use ($site) {
if (!$url) return "";
// Проверяем, не является ли URL уже абсолютным
if (preg_match('~^https?://~i', $url)) return $url;
// Убираем возможный ведущий слеш, чтобы не было двойных слешей
$url = ltrim($url, '/');
return $site . '/' . $url;
};
$cleanHtml = function($html) {
$html = (string)$html;
// вырезаем потенциально проблемные вещи
$html = preg_replace('~<\s*(script|style|iframe|object|embed)[^>]*>.*?<\s*/\s*\1\s*>~is', '', $html);
// убираем inline-style (часто "ругается/ломает")
$html = preg_replace('~(<[^>]+)\sstyle="[^"]*"~i', '$1', $html);
// оставляем базовые теги
$allowed = '<p><br><a><b><strong><i><em><ul><ol><li><figure><img><h2><h3><blockquote>';
$html = strip_tags($html, $allowed);
return trim($html);
};
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:georss="http://www.georss.org/georss">
<channel>
<title><?= $xmlEscape($CHANNEL_TITLE) ?></title>
<link><?= $xmlEscape($CHANNEL_LINK) ?></link>
<description><?= $xmlEscape($CHANNEL_DESC) ?></description>
<language>ru</language>
<atom:link href="<?= $xmlEscape($site . $_SERVER['REQUEST_URI']) ?>" rel="self" type="application/rss+xml" />
<?php while ($item = $res->GetNext()):
$url = $absUrl($item["DETAIL_PAGE_URL"]);
// Даты в RFC822 с полным годом (4 цифры)
$timestamp = $item["DATE_ACTIVE_FROM"] ? MakeTimeStamp($item["DATE_ACTIVE_FROM"]) : time();
// Форматируем дату в RFC822 с полным годом
$pubDate = date('D, d M Y H:i:s O', $timestamp);
// Текст
$desc = $item["PREVIEW_TEXT"] ?: "";
$full = $item["DETAIL_TEXT"] ?: $desc;
$desc = strip_tags($desc);
$full = $cleanHtml($full);
// Картинка (превью/детальная) - делаем абсолютную ссылку
$imgId = $item["DETAIL_PICTURE"] ?: $item["PREVIEW_PICTURE"];
$imgUrl = "";
if ($imgId) {
$imgPath = CFile::GetPath($imgId);
if ($imgPath) {
$imgUrl = $absUrl($imgPath);
}
}
// Если есть картинка — лучше первым блоком в контенте сделать figure/img
$firstFigure = $imgUrl ? '<figure><img src="'.$xmlEscape($imgUrl).'" alt="'.$xmlEscape($item["NAME"]).'" /></figure>' : '';
// Категория (из TAGS или задайте фиксированно)
$category = $item["TAGS"] ? trim(explode(",", $item["TAGS"])[0]) : "Публикации";
?>
<item>
<title><?= $xmlEscape($item["NAME"]) ?></title>
<link><?= $xmlEscape($url) ?></link>
<pdalink><?= $xmlEscape($url) ?></pdalink>
<media:rating scheme="urn:simple">nonadult</media:rating>
<pubDate><?= $pubDate ?></pubDate>
<category><?= $xmlEscape($category) ?></category>
<?php if ($imgUrl): ?>
<enclosure url="<?= $xmlEscape($imgUrl) ?>" type="image/jpeg" />
<?php endif; ?>
<description><![CDATA[
<?= $firstFigure ?>
<p><?= $desc ?></p>
]]></description>
<content:encoded><![CDATA[
<?= $firstFigure ?>
<?= $full ?>
]]></content:encoded>
<guid isPermaLink="true"><?= $xmlEscape($url) ?></guid>
</item>
<?php endwhile; ?>
</channel>
</rss>
Поделитесь с друзьями
