@krispey102

Sitemap.php автогенератор делает дублирующую главную страницу, как убрать?

Есть автогенератор карты на 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' => '/vacancies/',
);
$array_pages[] = array(
   	'NAME' => 'Производство',
   	'URL' => '/directions/production/',
);
$array_pages[] = array(
   	'NAME' => 'IT & Digital',
   	'URL' => '/directions/digital/',
);
$array_pages[] = array(
   	'NAME' => 'Офис',
   	'URL' => '/directions/office/',
);
$array_pages[] = array(
   	'NAME' => 'Молодым специалистам',
   	'URL' => '/directions/graduates/',
);
$array_pages[] = array(
   	'NAME' => 'Предприятия',
   	'URL' => '/units/',
);
$array_pages[] = array(
   	'NAME' => 'Предприятия',
   	'URL' => '/privacy_policy/'
);
//Простые текстовые страницы: конец


$array_iblocks_id = array('1', '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 документ: начало
$date = date("d/M/y H:m:s");
$xml_content = '';
$site_url = 'https://'.$_SERVER['HTTP_HOST'];
$quantity_elements = 0;
foreach($array_pages as $v)
{
	$quantity_elements++;
	$xml_content.='
   	<url>
		<loc>'.$site_url.$v['URL'].'</loc>
	</url>';
}
//Создаём XML документ: конец

//Выводим документ
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	'.$xml_content.'
</urlset>
';
?>

Работает исправно, но только главную страницу выдает несколько раз, из-за чего в сгенерированном сайтмапе бывает 10-15 штук главных страниц, как пофиксить?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@krispey102 Автор вопроса
Решил, почему создаются несколько главных страниц. В переменной $url хранится url детальной страницы, но походу некоторые элементы были без url, и поэтому он выводил просто ссылку домена. Сделал проверку на пустоту и теперь не выводит пустые элементы
if ($v['URL']) {
	$xml_content.='
   	<url>
		<loc>'.$site_url.$v['URL'].'</loc>
	</url>';
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nefone
@nefone
Junior PHP разработчик
Сделать значение в массиве $array_pages уникальными, с помощью функции array_unique

//Создаём XML документ: начало
$date = date("d/M/y H:m:s");
$xml_content = '';
$site_url = 'https://'.$_SERVER['HTTP_HOST'];
$quantity_elements = 0;
$array_pages_uniq = array_unique($array_pages);
foreach($array_pages_uniq as $v)
{
  $quantity_elements++;
  $xml_content.='
   	<url>
    <loc>'.$site_url.$v['URL'].'</loc>
  </url>';
}
//Создаём XML документ: конец
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы