[evo] Делаем xml-карту сайта для Google и Яндекса на Evo

ecco

Постоялец
Регистрация
21 Апр 2007
Сообщения
63
Реакции
16
Создаем сниппет Sitemap и вставляем в него код:
PHP:
<?php
//откуда начать
$startid = (isset($startid)) ? $startid : 0;
//в каком формате выводить результат (url или xml)
global $formatSP; 
$formatSP = (isset($format)) ? $format : 'xml';
//название TV-параметра, по которому отмечаются запрещенные для вывода элементы
global $excludeTVSP;
$excludeTVSP = (isset($excludeTV)) ? $excludeTV : 'sitemap_exclude';
//номера шаблонов которые запрещается выводить (0 - blank)
global $excludeTemplatesSP;
$excludeTemplatesSP = (isset($excludeTemplates)) ? $excludeTemplates : '';
	$excludeTemplatesSP = explode(",", $excludeTemplatesSP);
//номера ID-шников которые выводить надо, но их дочерние элементы - нет	
global $excludeChildsSP;
$excludeChildsSP = (isset($excludeChilds)) ? $excludeChilds : '';
	$excludeChildsSP = explode(",", $excludeChildsSP);	
//номера ID-шников которые не надо выводить
global $excludeIdSP;
$excludeIdSP = (isset($excludeDocs)) ? $excludeDocs : '';
	$excludeIdSP = explode(",", $excludeIdSP);	
$out = getDocs($startid);
if ($formatSP=='url')
{
	$output = "<ul class=\"sitemap\">$out</ul>";
}
else
{
	$output = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
	$output .='<urlset '."\n";
	$output .='xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ';
	$output .='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
	$output .='xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 ';
	$output .='http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" ';
	$output .='>';
	$output .= $out;
	$output .= '</urlset>';
}
return $output;
# gets list of published documents with properties
function getDocs($startid)
{
	global $modx,$formatSP,$excludeTVSP,$excludeTemplatesSP,$excludeChildsSP,$excludeIdSP;
	// get children documents
	$docs = $modx->getActiveChildren($startid,'menuindex','asc','id,editedon,template,published,deleted,searchable,pagetitle,type'); 
	// add sub-children to the list
	foreach ($docs as $key => $doc)
	{
		$tv = $modx->getTemplateVar($excludeTVSP,'*',$doc['id']);
		if (($tv['value']!=1) 
			&& (!in_array($doc['template'],$excludeTemplatesSP))
			&& ($doc['type']=='document')
			&& ($doc['id']!=$modx->documentIdentifier)
			&& ($doc['published'])
			&& (!$doc['deleted'])
			&& (!in_array($doc['id'],$excludeIdSP))
			)// tv default value is overriden (including empty)
		{
			if (in_array($doc['id'],$excludeChildsSP))
				$child='';
			else
				$child = getDocs($doc['id']);
			if ($doc['id'] == $modx->config['site_start'])
				$url = '[(site_url)]';
			else
				$url = '[(site_url)][~'.$doc['id'].'~]';
			if($formatSP=='url')
			{
				$date = date("d-m-Y", $doc['editedon']);
				$output .= "<li>";
				$output .= "<a href=\"$url\">".$doc['pagetitle']."</a>";
				if ($child) $output.="<ul>$child</ul>";
				$output .= "</li>\n";
			}else
			{
				$date = date("Y-m-d", $doc['editedon']);
				$output .= "\t<url>\n";
				$output .= "\t\t<loc>$url</loc>\n";
				$output .= "\t\t<lastmod>$date</lastmod>\n";
				$output .= "\t</url>\n";
				$output .= $child;
			}
		}
	}
	return $output;
}
?>

Пусть Вас не смущает то, что в коде указаны старые версии. Просто не стал править=) В самом коде внесены пара строчек изменений по сравнению с эталонным от старых МОДх.

Выбор «Показывать/не показывать» в карте сайта:
— создаем TV "sitemap_exclude"
— тип Dropdown List Menu
— возможные значения Показывать==0||Не показывать==1
— по умолчанию
— отмечаем все шаблоны, какие нужно
Далее создаем в корне сайта документ «Карта сайта»:
— тип содержимого html/xml
— убрать галочку у html-редкатора (Очень важно!!!)
— псеводним sitemap.xml
— шаблон blank
— в тело документа вставляем:

[!SiteMap? &format=`xml` &excludeTV=`sitemap_exclude` &excludeTemplates=`` &excludeChilds=``!]

Параметры:
excludeTemplates — не отправлять в карту сайта документы с таким ID шаблона
excludeChilds — не показывть в карте дочерние документы этих папок

Индекс в ЧПУ должен быть отключен, иначе получится sitemap.xml.tml например.
Работает в 1.0.2 и выше.

ЗЫ: Статья взята с
 
Проще сделать через ditto.

Код страницы:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
[[Ditto?&dateFormat=`%Y-%m-%d`&parents=`0` &tpl=`google-sitemap-tpl` &displayArchive=`0`&dateSource=`editedon`&summarize=`500` &total=`500`&sortBy=`createon`&depth=`6`&showInMenuOnly=`1`]]
</urlset>

Чанк google-sitemap-tpl:
Код:
<url>      
<loc>[(site_url)][~[+id+]~]</loc>      
<lastmod>[+date+]</lastmod>      
</url>
 
  • Нравится
Реакции: ecco
Есть внятная инструкция как сделать sitemap для Revo?
 
Назад
Сверху