https://seomost.ru/blog/tegi-i-vyorstka/xml-sitemap-index-sitemap-i-modx/
Начало » БЛОГ » Теги и вёрстка » Как сделать красивый XML Sitemap Index, Sitemap для MODx Evo

Как сделать красивый XML Sitemap Index, Sitemap для MODx Evo

+7 (495) 722-44-90

Есть на нашем сайте, который на MODx Evo, индекс карты сайта для Гугла — http://seomost.ru/sitemap.xml

Я не великий специалист, так что пришлось потратить время.

Поэтапно:

Создаём файл в /assets/snippets/ditto/formats/, я скопировал xml.format.inc.php и назвал его для удобства xml-sitemap-index.format.inc.php, потом его изменил:

 <?php
/* 	Ditto's output capabilities to include XML */
$xml_placeholders['[+xml_copyright+]'] = isset($copyright) ? $copyright: $_lang['default_copyright'];
$xml_placeholders['[+xml_lang+]'] = (isset($abbrLanguage))? $abbrLanguage : $_lang['abbr_lang'];
$xml_placeholders['[+xml_link+]'] = $modx->config['site_url']."[~".$modx->documentObject['id']."~]";
$xml_placeholders['[+xml_ttl+]'] = isset($ttl) ? intval($ttl):120;
$xml_placeholders['[+xml_charset+]'] = isset($charset) ? $charset : $modx->config['modx_charset'];
$rss_placeholders['[+xml_xsl+]'] = isset($xsl) ? '<?xml-stylesheet type="text/xsl" href="'.$modx->config['site_url'].$xsl.'" ?>' : '';
$placeholders['*'] = "xml_parameters"; 
if(!function_exists("xml_parameters")) { 
	function xml_parameters($placeholders) {
		$xmlArr = array();
		foreach ($placeholders as $name=>$value) {
			$xmlArr["xml_".$name] = htmlentities($value);
		}
		$placeholders = array_merge($xmlArr,$placeholders);
		return $placeholders;	
	}
}
// set default templates

$xml_header = <<<TPL
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="[(base_url)]assets/templates/seo/xml/sitemap-index-stylesheet.xsl"?>
<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd"
         xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
TPL;
$xml_tpl = <<<TPL

<sitemap>
      <loc>[(base_url)][+alias+].xml</loc>
</sitemap>
TPL;
$xml_footer = <<<TPL
			
</sitemapindex>
TPL;
$header = isset($header) ? $header : template::replace($xml_placeholders,$xml_header);
$tpl = isset($tpl) ? $tpl : "@CODE:".$xml_tpl;
$footer = isset($footer) ? $footer : $xml_footer;
$noResults = "      ";
?>

Файл стиля (sitemap-index-stylesheet.xsl) для индекса (http://seomost.ru/sitemap.xml), который подключается в xml-sitemap-index.format.inc.php, выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:html="http://www.w3.org/TR/REC-html40"
                xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <title>XML Sitemap Index</title>
                
<style type="text/css">
h1 {font-size:18px;color:#FF5809 !important;}
body {margin-left: 25px;font-size: 14px;font-family: 'Lucida Grande', Helvetica, Arial, sans-serif;}
span {color:#FF5809 !important;}
p {border-bottom:1px #ccc solid;padding: 5px;}
#content {margin-left: 15px;}
table { border: 1px #ccc solid; font-size: 14px; margin-top: 20px; margin-left: -5px; }
table tr:nth-child(odd) td { background: #f2f7ff; }
table td { padding: 5px; margin: 0; vertical-align: middle; background: #fff;  }
table th { text-align: left; border-bottom: 1px #ccc solid;padding: 5px; font-weight: bold; background: #fff; }
table tr:hover td { background: #ffffe5; }
table a { padding: 16px; font-size:14px; font-weight: bold; color:#00CE00 !important;}
</style>
            </head>
            <body>
                <h1>XML Sitemap Index</h1>
                <p>
                    Эта sitemap index   показывает все  sitemap  для  сайта <a href="http://seomost.ru/">
					Seomost.ru</a>,
					<br/> 
					используется <span>MODx CMF</span>, сниппет <span>Ditto</span>.
                </p>
                <div id="content">
                    <table>
                        <tr style="border-bottom:1px black solid;">
                            <th>URL</th>
                         </tr>
                        <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
                            <tr>
                                <td>
                                    <xsl:variable name="itemURL">
                                        <xsl:value-of select="sitemap:loc"/>
                                    </xsl:variable>
                                    <a href="{$itemURL}">
                                        <xsl:value-of select="sitemap:loc"/>
                                    </a>
                                </td>

                            </tr>
                        </xsl:for-each>
                    </table>
                </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Вызов Ditto на самой странице индекса (http://seomost.ru/sitemap.xml) выглядит так:

[[Ditto?&format=`xml-sitemap-index`&documents=`96,49`]]

где xml-sitemap-index это часть названия файла, который описывался выше (xml-sitemap-index.format.inc.php), а 96,49 это id ваших sitemap(ов).

Как сделать красиво url и расширения

Так как, наши sitemap(ы) вообще то находятся вот тут, и без расширения:

http://seomost.ru/servis/sitemap/
http://seomost.ru/servis/sitemap1/
http://seomost.ru/servis/sitemap2/

если у вас так же, то в корневой файл .htaccess, после строки RewriteEngine On нужно добавить:

RewriteRule ^sitemap.xml$   /servis/sitemap/ [L]
RewriteRule ^sitemap1.xml$   /servis/sitemap1/ [L]
RewriteRule ^sitemap2.xml$  /servis/sitemap2/ [L]

по аналогии можно любую страницу отобразить так как вам хочется.

Это для тех кто не знают

В свойствах страницы индекса, в той где вызов Ditto (в админке), шаблон нужно выбрать blank, а на вкладке Настройка страницы в Тип содержимогоtext/xml

Об участниках :)

На нашем сайте в файле Sitemap Index используется Ditto, а в двух файлах sitemap используется GoogleSiteMap_XML Sitemap-1.0.11 и ListSiteMap.

Про создание простых sitemap для MODx Evo почитайте, еще где нибудь, информации полно.
Можно добавить, что sitemap index можно сделать как контейнер, а сами sitemap его дочерними документами. Вызов Ditto можно менять, а можно не менять, как кому удобно.

В 2018 году, снипет GoogleSiteMap_XML был заменен на Sitemap-1.0.11 из-за изменения кода самого Modx


Теги страницы: Sitemap Index, Sitemap, MODx Evo,XML Sitemap


Контакты

Адрес:
Москва, улица Лётчика Бабушкина дом 32 корп.2
Индекс:
129281
Телефон:
ваш IP адрес отсутствует в базе клиентов

Seomost.ru - оптимизация и продвижение сайтов Лётчика Бабушкина улица, д.32 корп.2 129281 Москва +7 495 722-44-90 Seomost.ru - оптимизация и продвижение сайтов Лётчика Бабушкина улица, д.32 корп.2 129281 Москва +7 495 722-44-90 с понедельника по пятницу, с 10:00 до 17:00