Textpattern CMS, MLP и карта сайта (sitemap)

При использовании в Textpattern CMS плагина Multi-Lingual Publishing Pack возникает проблема при генерации файла sitemap (который XML-ный список всех страниц сайта). Эта проблема заключается в том, что в URL страниц сайта не содержится идентификатор языка. Т.е. если для статьи на русском языке правильная ссылка выглядит, например, так:

http://www.mysite.com/ru/section/id/title

То в результате в файле sitemap будет такая ссылка:

http://www.mysite.com/section/id/title

что совсем неправильно.

Для генерации карты сайта я пробовал использовать плагины rah_sitemap и jmd_sitemap – результат одинаково неправильный.

Однако существует выход из этой ситуации. Распишу его по шагам:

1. Устанавливаем плагин mg_setheader. Этот плагин предназначен для установки/изменения Header для любых страниц Textpattern. Нам он понадобится для изменения "Content-Type" на "text/xml" (для всех страниц Textpattern ставит "text/html").

2. Делаем правку MLP плагина. Открываем управление плагинами. Ищем Multi-Lingual Publishing Package и жмем «Редактировать». Ищем функцию _l10n_inject_lang_markers(). В теле функции ищем следующий код:

# Insert language code into any URLs embedded as text in hyperlinks (eg search results)...
	$l10n_replace_strings['start'] = $l10n_replace_strings['start_rep'] = '>';
	$l10n_replace_strings['stop']  = $l10n_replace_strings['stop_rep']  = '</a>';
	$l10n_replace_strings['insert_blank'] = false;
	$pattern2 = _l10n_make_pattern();
	$buffer = _l10n_preg_replace_callback( $pattern2, '_l10n_inject_lang_markers_cb', $buffer );

После дописываем следующий кусочек кода и сохраняем:

	$l10n_replace_strings['start'] = $l10n_replace_strings['start_rep'] = '<loc>';
	$l10n_replace_strings['stop']  = $l10n_replace_strings['stop_rep']  = '</loc>';
	$l10n_replace_strings['insert_blank'] = false;
	$pattern3 = _l10n_make_pattern();
	$buffer = _l10n_preg_replace_callback( $pattern3, '_l10n_inject_lang_markers_cb', $buffer );

Благодаря этому коду MLP будет выполнять подстановку языкового сегмента URL в адреса заключенные в теги <loc></loc>, используемые в файлах sitemap.

3. Создаем форму с названием sitemap и типом article. Код формы будет таким:

<url><loc><txp:permlink /></loc><lastmod><txp:posted format="%Y-%m-%d" /></lastmod></url>

4. Добавляем страницу с именем sitemap. Код шаблона страницы будет следующим:

<txp:mg_setheader /><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<txp:article_custom limit="9999" form="sitemap" sort="ID"/></urlset>

limit="9999" – ограничение на количество статей (выведет только 9999), form="sitemap" – используем форму sitemap для вывода, sort="ID" – сортируем по идентификаторам статей.

5. Затем создаем секцию sitemap. Для секции назначаем страницу sitemap и везде ставим «Нет».

В результате у нас появились карты сайта для каждого из языков, используемых на сайте.

Теперь осталось в корневой директории нашего сайта создать sitemap.xml, в котором будет список sitemap для каждого из языков.

Например, для языков en, ru и uk файл sitemap.xml будет выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
	<loc>http:// www.mysite.com/en/sitemap</loc>
</sitemap>
<sitemap>
	<loc>http:// www.mysite.com/ru/sitemap</loc>
</sitemap>
<sitemap>
	<loc>http:// www.mysite.com/uk/sitemap</loc>
</sitemap>
</sitemapindex>

Комментарии

Оставить комментарий

Ответ на Textpattern CMS, MLP и карта сайта (sitemap)