dimayakovlev.ru


Добавление собственных страниц в карту веб-сайта в GetSimple CMS

На практике совершенно необязательно, чтобы весь веб-сайт управлялся при помощи единой системы управления контентом. Например, основная часть веб-сайта может управляться при помощи системы управления контентом GetSimple CMS, а один из его разделов может состоять из статических страниц, формируемых с помощью генератора статических веб-сайтов, или формироваться динамически на основании данных, хранящихся в отдельной базе данных. Для посетителя веб-сайта разницы не будет, но она может быть для роботов поисковых систем, которые получают информацию о доступных к индексации страницах из файла карты веб-сайта sitemap.xml.

Для улучшения индексирования веб-сайта и упрощения работы администратора, система управления контентом GetSimple CMS автоматически создаёт и изменяет файл sitemap.xml при любых действиях пользователя со страницами. Однако это касается только тех страниц, которые управляются через GetSimple CMS, остальные страницы веб-сайта не будут добавлены в файл sitemap.xml, так как они не имеют отношения к системе управления контентом, и система не может учитывать их существование в структуре веб-сайта.

В этом случае, чтобы не проигрывать в эффективности индексирования веб-сайта, можно выбрать один из двух вариантов:

  1. Создать отдельные карты с адресами страниц для разделов веб-сайта, не управляемых системой управления контентом, и передать их роботам поисковых систем для индексирования;
  2. Передать информацию о страницах разделов веб-сайта, не управляемых системой управления контентом, системе управления контентом для включения этих страниц в единый файл sitemap.xml, создаваемый и автоматически управляемый ею.

Для тех, кто использует GetSimple CMS в рамках рассматриваемого сценария и выбирает вариант с единым файлом sitemap.xml, приведу вариант решения задачи.

Причём сама задача разделяется на две подзадачи:

  1. Получение списка адресов страниц разделов;
  2. Передача списка адресов страниц разделов системе управления контентом.

Как получить список адресов страниц раздела веб-сайта - подзадача, решаемая частным способом в зависимости от метода организации и инструментов, которыми управляются разделы веб-сайта. Здесь может быть и получение списка HTML файлов из файловой системы, и использование заранее подготовленных индексов, и обращение с запросом к системе управления базами данных. Поэтому практическую часть решения этой подзадачи в рамках рассматриваемой темы следует опустить.

После того, как получен список адресов страниц, задача сводится к ответу на следующий вопрос.

Как добавить собственные страницы в карту веб-сайта в GetSimple CMS?

Здесь под собственными страницами понимаются страницы, которые пользователь хочет добавить в карту веб-сайта, которые при этом не управляются системой управления контентом.

За создание и сохранение в файл sitemap.xml отвечает функция generate_sitemap(). Внутри функции выполняется создание XML-документа карты сайта, который, после добавления в него всех страниц веб-сайта, управляемых системой управления контентом GetSimple CMS, передаётся фильтру sitemap. Используя этот фильтр, в XML-документ можно добавить собственные страницы.

Для этого понадобится создать и добавить новый или расширить возможности уже имеющегося плагина. Далее приведён пример функции, которую можно использовать в плагине для GetSimple CMS. После объявления функции её имя следует использовать при вызове фильтра sitemap.

/*
 * Add Custom Pages to Sitemap
 *
 * Add custom pages to the given sitemap XML document
 *
 * @global string $SITEURL Website URL
 * @param SimpleXMLElement $sitemap Sitemap XML document
 * @return SimpleXMLElement Sitemap XML document with custom pages
 */
function addCustomPagesToSitemap($sitemap) {
	global $SITEURL;
	$pages = array(
		'/static/' => array(
			'changefreq' => 'daily',
			'priority' => '1.0'
		),
		'/static/01/' => array(
			'changefreq' => 'monthly',
			'priority' => '0.5'
		),
		'/static/02/' => array(
			'changefreq' => 'monthly',
			'priority' => '0.5'
		),
		'/static/03/' => array(
			'changefreq' => 'monthly',
			'priority' => '0.5'
		)
	);
	foreach ($pages as $url => $data) {
		$url_item = $sitemap->addChild('url');
		$url_item->addAttribute('custom', true);
		$url_item->addChild('loc', rtrim($SITEURL, '/') . $url);
		foreach ($data as $key => $value) {
			$url_item->addChild($key, $value);
		}
	}
	return $sitemap;
}

add_filter('sitemap', 'addCustomPagesToSitemap');

В результате вызова фильтром sitemap функция addCustomPagesToSitemap() добавит в XML-документ страницы, заданные в определённом внутри неё массиве $pages. Как уже было сказано, формирование массива $pages это частный случай и может быть выполнено любым способом. С целью идентификации всех включённых в карту сайта собственных страниц, каждому XML-элементу url назначен атрибут custom. Это сделано для наглядности, при практическом использовании маркировка и назначение атрибутов не требуется.

Для избежания возможных ошибок, следует обратить внимание на то, что передаваемый функции параметр $sitemap является объектом класса SimpleXMLElement, а не DOMDocument, что тоже могло бы быть ожидаемо.

После того, как PHP-код написан, оформлен и подключён в виде плагина, адреса страниц веб-сайта, не управляемые GetSimple CMS, будут сохранены в файле sitemap.xml и не будут потеряны для поисковых роботов. Это ещё один наглядный пример гибкости, доступной при выборе системы управления контентом GetSimple CMS для обеспечения работы своего веб-сайта.