Автообновляемая карта сайта (sitemap.xml) для Битрикса
12 ноября 2015
В стандартных функциях Битрикса карта сайта создаётся вручную через файлы. Под ручным созданием понимается не написание файла с нуля, а создание карты через нажатие кнопки. Если на сайте поменялись данные, то автоматически файл не обновляется и приходится это делать вручную, нажимая кнопку "Запустить".

Такие извращения не могут устраивать, поэтому нам нужна автообновляемая карта, которая не будет требовать совершения лишних действий. Для этого в корне сайта создаём файл sitemap.php и помещаем в него нижний код. Готовый файл sitemap.php можно скачать тут.
Только учтите, что в вашем случае нужно будет указать свои адреса статичных текстовых страниц и ID инфоблоков.
Теперь карта сайта будет доступна по адресу http://test-site.ru/sitemap.php. Путь не очень красивый, т.к файл имеет расширенние PHP, а желательно иметь расширение XML. Не проблема, сделаем перенаправление через файл «.htaccess». Для этого в файл «.htaccess» добавим следующие строки:
http://test-site.ru/sitemap.xml

Такие извращения не могут устраивать, поэтому нам нужна автообновляемая карта, которая не будет требовать совершения лишних действий. Для этого в корне сайта создаём файл sitemap.php и помещаем в него нижний код. Готовый файл sitemap.php можно скачать тут.
<?php
//Отключаем статистику Bitrix
define("NO_KEEP_STATISTIC", true);
//Подключаем движок
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
//устанавливаем тип ответа как xml документ
header('Content-Type: application/xml; charset=utf-8');
$array_pages = array();
//Простые текстовые страницы: начало
$array_pages[] = array(
'NAME' => 'Главная страница',
'URL' => '/',
);
$array_pages[] = array(
'NAME' => 'Компания',
'URL' => '/kompaniya/',
);
$array_pages[] = array(
'NAME' => 'Новости',
'URL' => '/novosti/',
);
$array_pages[] = array(
'NAME' => 'Услуги',
'URL' => '/uslugi/',
);
$array_pages[] = array(
'NAME' => 'Портфолио',
'URL' => '/portfolio/',
);
$array_pages[] = array(
'NAME' => 'Отзывы',
'URL' => '/otzyvy/',
);
$array_pages[] = array(
'NAME' => 'Контакты',
'URL' => '/kontakty/',
);
//Простые текстовые страницы: конец
$array_iblocks_id = array('1', '3', '4', '5'); //ID инфоблоков, разделы и элементы которых попадут в карту сайта
if(CModule::IncludeModule("iblock"))
{
foreach($array_iblocks_id as $iblock_id)
{
//Список разделов
//Список элементов
$res = CIBlockSection::GetList(
array(),
Array(
"IBLOCK_ID" => $iblock_id,
"ACTIVE" => "Y" ,
),
false,
array(
"ID",
"NAME",
"SECTION_PAGE_URL",
));
while($ob = $res->GetNext())
{
$array_pages[] = array(
'NAME' => $ob['NAME'],
'URL' => $ob['SECTION_PAGE_URL'],
);
}
//Список элементов
$res = CIBlockElement::GetList(
array(),
Array(
"IBLOCK_ID" => $iblock_id,
"ACTIVE_DATE" => "Y",
"ACTIVE" => "Y" ,
),
false,
false,
array(
"ID",
"NAME",
"DETAIL_PAGE_URL",
));
while($ob = $res->GetNext())
{
$array_pages[] = array(
'NAME' => $ob['NAME'],
'URL' => $ob['DETAIL_PAGE_URL'],
);
}
}
}
//Создаём XML документ: начало
$xml_content = '';
$site_url = 'http://'.$_SERVER['HTTP_HOST'];
$quantity_elements = 0;
foreach($array_pages as $v)
{
$quantity_elements++;
$xml_content.='
<url>
<loc>'.$site_url.$v['URL'].'</loc>
<priority>1</priority>
</url>
';
}
//Создаём XML документ: конец
//Выводим документ
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
'.$xml_content.'
</urlset>
';
?>
Только учтите, что в вашем случае нужно будет указать свои адреса статичных текстовых страниц и ID инфоблоков.
Теперь карта сайта будет доступна по адресу http://test-site.ru/sitemap.php. Путь не очень красивый, т.к файл имеет расширенние PHP, а желательно иметь расширение XML. Не проблема, сделаем перенаправление через файл «.htaccess». Для этого в файл «.htaccess» добавим следующие строки:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
#Доступ карты сайта с sitemap.xml на sitemap.php
RewriteRule ^sitemap\.xml$ sitemap\.php [L]
</IfModule>
Готово, теперь карта доступна по двум адресам:
http://test-site.ru/sitemap.phphttp://test-site.ru/sitemap.xml