Difference between revisions of "ListFeed"

From Wiki4Intranet
Jump to: navigation, search
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.
+
{{Extension4info
 
+
|name=ListFeed
Исходный код расширения можно взять здесь: [{{SVN|vitalif/trunk/mediawiki/ListFeed}} vitalif/trunk/mediawiki/ListFeed].
+
|description en=Simple RSS feed generation from wiki lists (* and #).
 
+
|description ru=Генерация простых RSS-лент из вики-списков (* или #).
== Установка ==
+
|created=2009-07-30
 
+
|version=2012-05-04
Нужно добавить следующие строки в <tt>LocalSettings.php</tt>:
+
|included=2009-07-30
 
+
|status=our
<source lang=php>
+
|useful=likely
require_once("$IP/extensions/ListFeed/ListFeed.php");
+
}}
// Необязательно:
+
{{ExtensionFromInfo|lang=en|name=ListFeed}}
$egListFeedFeedUrlPrefix = "<URL_к_директории_rss>"; // по умолчанию "$wgScriptPath/extensions/ListFeed/rss"
+
[[Category:Incomplete extension descriptions]]
$egListFeedFeedDir = "<Путь_к_директории_rss>";      // по умолчанию "$IP/extensions/ListFeed/rss"
+
</source>
+
 
+
== Использование ==
+
 
+
Расширение добавляет два новых тега — '''<tt>&lt;listfeed&gt;</tt>''' и '''<tt>&lt;endlistfeed /&gt;</tt>''', а также функцию парсера '''<tt><nowiki>{{#listfeedurl:Feed Name}}</nowiki></tt>''', которая возвращает URL RSS-ленты, сгенерированной расширением из списка с заданным именем. Расширение позволяет легко превратить любой маркированный или нумерованный Wiki-список в RSS-ленты, которая автоматически обновляется при обновлении статьи.
+
 
+
Каждый элемент списка становится отдельной записью ленты.
+
* Заголовком записи становится первая строка текста элемента списка.
+
* Текстом записи — всё остальное, если оно присутствует, и просто весь текст элемента списка, если нет.
+
* Дата записи разбирается в соответствии с заданным регулярным выражением (см. ниже) и вырезается из заголовка.
+
* Ссылкой записи становится первая ссылка в тексте, за исключением даты, так как в дате может присутствовать ссылка на автора, например, если используются стандартные подписи (<nowiki>~~~~</nowiki>). Если ссылок в тексте нет, используется ссылка на статью с уникальным якорем (anchor) для идентификации записи.
+
* Автором записи становится первая ссылка в пространство имён <nowiki>[[Участник:]]</nowiki> из текста элемента списка, либо автор последней ревизии статьи.
+
 
+
Ленты идентифицируются по именам (<tt>&lt;listfeed '''name=<nowiki>"ИМЯ_ЛЕНТЫ"</nowiki>'''&gt;</tt>) и помещаются в один каталог, поэтому в пределах одной Wiki-системы две ленты с одинаковыми именами будут перезаписывать друг друга при каждом обновлении страницы. Описанием ленты служит любой Wiki-код, заключённый в тег <tt>&lt;listfeed&gt;</tt> — он преобразуется в HTML и включается в RSS-элемент <tt>&lt;about&gt;</tt>.
+
 
+
Чтобы начать использовать ListFeed, добавьте тег <tt>&lt;listfeed&gt;</tt> перед вашим списком:
+
<pre><listfeed name="ИМЯ_ЛЕНТЫ" [ОПЦИИ]>
+
ОПИСАНИЕ_ЛЕНТЫ
+
</listfeed></pre>
+
 
+
И тег <tt>&lt;endlistfeed&gt;</tt> после списка:
+
<pre><endlistfeed /></pre>
+
 
+
Чтобы вставить ссылку на ленту в текст статьи, нужно использовать функцию парсера:
+
 
+
<pre>{{#listfeedurl:ИМЯ_ЛЕНТЫ}}</pre>
+
 
+
На данный момент доступны две опции, связанные с разбором дат элементов ленты.
+
 
+
=== Опция date ===
+
 
+
<big><tt>&lt;listfeed '''date=<nowiki>"ВЫРАЖЕНИЕ"</nowiki>'''&gt;</tt></big>.
+
 
+
Рядом с каждым элементом вашего списка, скорее всего, будет стоять дата. Однако, в каком она формате? Для установки формата с помощью специального регулярного выражения для разбора дат и служит эта опция. По умолчанию выбирается выражение для разбора стандартных подписей (<nowiki>~~~~</nowiki>):
+
<pre>^(?:[^:]+|<[^<>]*>)*%H:%M(?::%S)?,\s*%d\s+%b\s+%Y(?:\s*\(UTC\))?(?:\s*:?)</pre>
+
 
+
ВЫРАЖЕНИЕ похоже на обычные [http://www.pcre.org/ Perl-совместимые регулярные выражения], однако, кроме стандартных инструкций, включаемых в регулярные выражения, оно также может содержать большинство <tt>[http://linux.die.net/man/3/strftime strftime(3)]</tt>-подобных подстановок (см. ниже полный список поддерживаемых подстановок) и, таким образом, является как бы «обратной функцией» к <tt>[http://linux.die.net/man/3/strftime strftime(3)]</tt>.
+
 
+
На данный момент поддерживаются следующие подстановки <tt>strftime</tt>:
+
<tab sep="tab" class="simpletable" head="left">
+
%Y год (4 цифры)
+
%y год (2 цифры)
+
%C век (2 цифры), может использоваться вместе с %y, по умолчанию выбирается текущий век, если выделенный год и текущий год лежат в одной половине века, и предыдущий/следующий, если в разных
+
%m месяц (2 цифры, от 01 до 12)
+
%b / %B имя месяца — либо полное (Январь, Января, January), либо сокращённое (Янв, Jan)
+
%d день месяца (2 цифры)
+
%e день месяца (1 или 2 цифры)
+
%H / %h часы
+
%M минуты
+
%S секунды
+
%s UNIX время — количество секунд, прошедших с начала Эпохи UNIX (1970-01-01 00:00:00)
+
%% символ %
+
</tab>
+
Прочие подстановки <tt>strftime</tt> признаны либо слишком специальными, либо производными от вышеупомянутых и поэтому отдельно не поддерживаются.
+
 
+
=== Опция headingdate ===
+
 
+
<big><tt>&lt;listfeed '''headingdate=<nowiki>"ВЫРАЖЕНИЕ"</nowiki>'''&gt;</tt></big>.
+
 
+
Даты, или их части, также могут быть заданы в заголовках между элементами. Предположим статью со следующим текстом:
+
 
+
<pre><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 /></pre>
+
 
+
В данном случае даты не могут быть взяты целиком из каждого элемента, однако, год каждой даты со всей очевидностью присутствует в заголовке, поэтому и требуется разбирать его тоже. Для приведённого примера, выражение headingdate=<nowiki>"%Y"</nowiki> абсолютно корректно.
+
 
+
== Пример использования ==
+
 
+
<listfeed name="Новости расширения ListFeed">
+
Новости от Виталия Филиппова о разработке ListFeed.
+
</listfeed>
+
 
+
* [[Участник:VitaliyFilippov|VitaliyFilippov]] 12:12, 17 февраля 2010 (UTC): Расширение упрощено и отлажено, написана [[ListFeed|справочная статья]].
+
*: Отлажен разбор описаний лент, ликвидирована лишняя возможность сохранения старых записей в базе данных, так как она обеспечивалась большим количеством хитрой логики по определению изменившихся записей и эта логика всё равно не покрывала весь диапазон ситуаций, что вело к появлению дублированных записей.
+
* [[Участник:VitaliyFilippov|VitaliyFilippov]] 16:02, 16 сентября 2009 (UTC): Тест раскрытия <nowiki>~~~~</nowiki> и вообще PreSaveTransform.
+
* [[Участник:VitaliyFilippov|Виталий Филиппов]] 20:16, 29 июля 2009: Отлажено расширение [[ListFeed (MediaWiki)|ListFeed]]. Готово к использованию.
+
* [[Участник:VitaliyFilippov|Виталий Филиппов]] 14:11, 29 июля 2009: Создано расширение [[ListFeed (MediaWiki)|ListFeed]]. Отлаживаю.
+
*: (текст записи) ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.
+
 
+
<endlistfeed />
+
 
+
На выходе — вот такого вида лента: {{#listfeedurl:Новости расширения ListFeed}}.
+
 
+
[[Категория:Разработка]]
+
[[Категория:MediaWiki]]
+

Latest revision as of 16:01, 22 April 2013

ListFeed is a MediaWiki extension.

Status for Mediawiki4Intranet distribution:

  • Inclusion date: 2009-07-30
  • Included version: newest available
  • Improvement status: Created by MediaWiki4Intranet project