ListFeed

From Wiki4Intranet
Revision as of 16:54, 3 October 2011 by VitaliyFilippov (Talk | contribs) (Пример использования)

This is a page snapshot, showing old (but not deleted) versions of images and templates.
Jump to: navigation, search

ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.

Исходный код расширения можно взять здесь: http://wiki.4intra.net/svn/mediawiki4intranet/extensions/ListFeed.

Установка

Нужно добавить следующие строки в LocalSettings.php:

require_once("$IP/extensions/ListFeed/ListFeed.php");
// Необязательно:
$egListFeedFeedUrlPrefix = "<URL_к_директории_rss>"; // по умолчанию "$wgScriptPath/extensions/ListFeed/rss"
$egListFeedFeedDir = "<Путь_к_директории_rss>";      // по умолчанию "$IP/extensions/ListFeed/rss"

Использование

Расширение добавляет два новых тега — <listfeed> и <endlistfeed />, а также функцию парсера {{#listfeedurl:Feed Name}}, которая возвращает URL RSS-ленты, сгенерированной расширением из списка с заданным именем. Расширение позволяет легко превратить любой маркированный или нумерованный Wiki-список в RSS-ленты, которая автоматически обновляется при обновлении статьи.

Каждый элемент списка становится отдельной записью ленты.

  • Заголовком записи становится первая строка текста элемента списка.
  • Текстом записи — всё остальное, если оно присутствует, и просто весь текст элемента списка, если нет.
  • Дата записи разбирается в соответствии с заданным регулярным выражением (см. ниже) и вырезается из заголовка.
  • Ссылкой записи становится первая ссылка в тексте, за исключением даты, так как в дате может присутствовать ссылка на автора, например, если используются стандартные подписи (~~~~). Если ссылок в тексте нет, используется ссылка на статью с уникальным якорем (anchor) для идентификации записи.
  • Автором записи становится первая ссылка в пространство имён [[Участник:]] из текста элемента списка, либо автор последней ревизии статьи.

Ленты идентифицируются по именам (<listfeed name="ИМЯ_ЛЕНТЫ">) и помещаются в один каталог, поэтому в пределах одной Wiki-системы две ленты с одинаковыми именами будут перезаписывать друг друга при каждом обновлении страницы. Описанием ленты служит любой Wiki-код, заключённый в тег <listfeed> — он преобразуется в HTML и включается в RSS-элемент <about>.

Чтобы начать использовать ListFeed, добавьте тег <listfeed> перед вашим списком:

<listfeed name="ИМЯ_ЛЕНТЫ" [ОПЦИИ]>
ОПИСАНИЕ_ЛЕНТЫ
</listfeed>

И тег <endlistfeed> после списка:

<endlistfeed />

Чтобы вставить ссылку на ленту в текст статьи, нужно использовать функцию парсера:

{{#listfeedurl:ИМЯ_ЛЕНТЫ}}

На данный момент доступны две опции, связанные с разбором дат элементов ленты.

Опция date

<listfeed date="ВЫРАЖЕНИЕ">.

Рядом с каждым элементом вашего списка, скорее всего, будет стоять дата. Однако, в каком она формате? Для установки формата с помощью специального регулярного выражения для разбора дат и служит эта опция. По умолчанию выбирается выражение для разбора стандартных подписей (~~~~):

^(?:[^:]+|<[^<>]*>)*%H:%M(?::%S)?,\s*%d\s+%b\s+%Y(?:\s*\(UTC\))?(?:\s*:?)

ВЫРАЖЕНИЕ похоже на обычные Perl-совместимые регулярные выражения, однако, кроме стандартных инструкций, включаемых в регулярные выражения, оно также может содержать большинство strftime(3)-подобных подстановок (см. ниже полный список поддерживаемых подстановок) и, таким образом, является как бы «обратной функцией» к strftime(3).

На данный момент поддерживаются следующие подстановки strftime:

%Yгод (4 цифры)
%yгод (2 цифры)
%Cвек (2 цифры), может использоваться вместе с %y, по умолчанию выбирается текущий век, если выделенный год и текущий год лежат в одной половине века, и предыдущий/следующий, если в разных
%mмесяц (2 цифры, от 01 до 12)
%b / %Bимя месяца — либо полное (Январь, Января, January), либо сокращённое (Янв, Jan)
%dдень месяца (2 цифры)
%eдень месяца (1 или 2 цифры)
%H / %hчасы
%Mминуты
%Sсекунды
%sUNIX время — количество секунд, прошедших с начала Эпохи UNIX (1970-01-01 00:00:00)
%%символ %

Прочие подстановки strftime признаны либо слишком специальными, либо производными от вышеупомянутых и поэтому отдельно не поддерживаются.

Опция headingdate

<listfeed headingdate="ВЫРАЖЕНИЕ">.

Даты, или их части, также могут быть заданы в заголовках между элементами. Предположим статью со следующим текстом:

<listfeed name="News of extension" date="^%b %d:\s*" headingdate="%Y" />
= 2010 news =
* Jan 13: New version of ListFeed.
* Jan 01: Happy New Year!
= 2009 news =
* Dec 17: ...
* ...
<endlistfeed />

В данном случае даты не могут быть взяты целиком из каждого элемента, однако, год каждой даты со всей очевидностью присутствует в заголовке, поэтому и требуется разбирать его тоже. Для приведённого примера, выражение headingdate="%Y" абсолютно корректно.

Пример использования

Новости от Виталия Филиппова о разработке ListFeed.

  • VitaliyFilippov 12:12, 17 февраля 2010 (UTC): Расширение упрощено и отлажено, написана справочная статья.
    Отлажен разбор описаний лент, ликвидирована лишняя возможность сохранения старых записей в базе данных, так как она обеспечивалась большим количеством хитрой логики по определению изменившихся записей и эта логика всё равно не покрывала весь диапазон ситуаций, что вело к появлению дублированных записей.
  • VitaliyFilippov 16:02, 16 сентября 2009 (UTC): Тест раскрытия ~~~~ и вообще PreSaveTransform.
  • Виталий Филиппов 20:16, 29 июля 2009: Отлажено расширение ListFeed. Готово к использованию.
  • Виталий Филиппов 14:11, 29 июля 2009: Создано расширение ListFeed. Отлаживаю.
    (текст записи) ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.

На выходе — вот такого вида лента: https://wiki.4intra.net/rss/Новости_расширения_ListFeed.rss.