Textpattern CMS, MLP и rss feed.

При использовании в Textpattern CMS плагина Multi-Lingual Publishing Pack возникает проблема при генерации rss feed. RSS генерируется движком Textpattern, при этом не учитывается наличие плагина MLP. В результате сгенерированная лента содержит URL страниц сайта в которых отсутствует идентификатор языка. Т.е. если для статьи на русском языке правильная ссылка выглядит, например, так:

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

То в результате в rss feed будет такая ссылка:

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

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

Проблему эту решить просто. Решение аналогично решению проблемы с генерацией sitemap:

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

2. Устанавливаем плагин jad_oldposted. Плагин используется для вывода даты.

3. Правим исходники 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'] = '<link>';
	$l10n_replace_strings['stop']  = $l10n_replace_strings['stop_rep']  = '</link>';
	$l10n_replace_strings['insert_blank'] = false;
	$pattern4 = _l10n_make_pattern();
	$buffer = _l10n_preg_replace_callback( $pattern4 , '_l10n_inject_lang_markers_cb' , $buffer );

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

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

4. Создаем форму с названием rss-item и типом article. Код формы будет таким:

<item>
<title><txp:title /></title>
<description><![CDATA[
<txp:body />
]]></description>
<link><txp:permlink /></link>
<pubDate><txp:jad_oldposted format="D, d M Y H:i:s" /> GMT</pubDate>
<dc:creator><txp:author /></dc:creator>
<guid><txp:permlink /></guid>
</item>

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

<txp:mg_setheader /><?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<generator>http://textpattern.com/</generator>
<title>##z_title##</title>
<link><txp:site_url /></link>
<description>##z_slogan##</description>
<copyright>Copyrights (c) <txp:php>echo gmdate( "Y" );</txp:php> ##z_title##. All rights reserved.</copyright>
<pubDate><txp:php>echo gmdate( "D, d M Y H:i:s T" );</txp:php></pubDate>
<txp:article_custom allowoverride="0" form="rss-item" limit="25" sort="Posted desc" />
</channel>
</rss>

limit="25" – ограничение на количество статей (выведет только 25), form="rss-item" – используем форму rss-item для вывода, sort="Posted desc" – сортируем по дате публикации статей.

6. Теперь создаем секцию rss-feed. Для секции назначаем страницу rss и везде ставим «Нет».

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

Например, для языков en – http://www.mysite.com/en/rss-feed, ru – http://www.mysite.com/ru/rss-feed и uk – http://www.mysite.com/uk/rss-feed.


Комментарии

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

Ответ на Textpattern CMS, MLP и rss feed.