|
|
(6 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | {{Extension4i | + | {{Extension4info |
| |name=ListFeed | | |name=ListFeed |
− | |назначение=Генерация RSS-лент из вики-списков (* или #). | + | |description en=Simple RSS feed generation from wiki lists (* and #). |
| + | |description ru=Генерация простых RSS-лент из вики-списков (* или #). |
| |created=2009-07-30 | | |created=2009-07-30 |
| |version=2012-05-04 | | |version=2012-05-04 |
| |included=2009-07-30 | | |included=2009-07-30 |
| |status=our | | |status=our |
| + | |useful=likely |
| }} | | }} |
− | | + | {{ExtensionFromInfo|lang=en|name=ListFeed}} |
− | ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.
| + | [[Category:Incomplete extension descriptions]] |
− | | + | |
− | Исходный код расширения можно взять здесь: {{svnmw|extensions/ListFeed}}.
| + | |
− | | + | |
− | == Установка ==
| + | |
− | | + | |
− | Нужно добавить следующие строки в <tt>LocalSettings.php</tt>:
| + | |
− | | + | |
− | <source lang=php>
| + | |
− | require_once("$IP/extensions/ListFeed/ListFeed.php");
| + | |
− | // Необязательно:
| + | |
− | $egListFeedFeedUrlPrefix = "<URL_к_директории_rss>"; // по умолчанию "$wgScriptPath/extensions/ListFeed/rss"
| + | |
− | $egListFeedFeedDir = "<Путь_к_директории_rss>"; // по умолчанию "$IP/extensions/ListFeed/rss"
| + | |
− | </source>
| + | |
− | | + | |
− | == Использование ==
| + | |
− | | + | |
− | Расширение добавляет два новых тега — '''<tt><listfeed></tt>''' и '''<tt><endlistfeed /></tt>''', а также функцию парсера '''<tt><nowiki>{{#listfeedurl:Feed Name}}</nowiki></tt>''', которая возвращает URL RSS-ленты, сгенерированной расширением из списка с заданным именем. Расширение позволяет легко превратить любой маркированный или нумерованный Wiki-список в RSS-ленты, которая автоматически обновляется при обновлении статьи.
| + | |
− | | + | |
− | Каждый элемент списка становится отдельной записью ленты.
| + | |
− | * Заголовком записи становится первая строка текста элемента списка.
| + | |
− | * Текстом записи — всё остальное, если оно присутствует, и просто весь текст элемента списка, если нет.
| + | |
− | * Дата записи разбирается в соответствии с заданным регулярным выражением (см. ниже) и вырезается из заголовка.
| + | |
− | * Ссылкой записи становится первая ссылка в тексте, за исключением даты, так как в дате может присутствовать ссылка на автора, например, если используются стандартные подписи (<nowiki>~~~~</nowiki>). Если ссылок в тексте нет, используется ссылка на статью с уникальным якорем (anchor) для идентификации записи.
| + | |
− | * Автором записи становится первая ссылка в пространство имён <nowiki>[[Участник:]]</nowiki> из текста элемента списка, либо автор последней ревизии статьи.
| + | |
− | | + | |
− | Ленты идентифицируются по именам (<tt><listfeed '''name=<nowiki>"ИМЯ_ЛЕНТЫ"</nowiki>'''></tt>) и помещаются в один каталог, поэтому в пределах одной Wiki-системы две ленты с одинаковыми именами будут перезаписывать друг друга при каждом обновлении страницы. Описанием ленты служит любой Wiki-код, заключённый в тег <tt><listfeed></tt> — он преобразуется в HTML и включается в RSS-элемент <tt><about></tt>.
| + | |
− | | + | |
− | Чтобы начать использовать ListFeed, добавьте тег <tt><listfeed></tt> перед вашим списком:
| + | |
− | <pre><listfeed name="ИМЯ_ЛЕНТЫ" [ОПЦИИ]>
| + | |
− | ОПИСАНИЕ_ЛЕНТЫ
| + | |
− | </listfeed></pre>
| + | |
− | | + | |
− | И тег <tt><endlistfeed></tt> после списка:
| + | |
− | <pre><endlistfeed /></pre>
| + | |
− | | + | |
− | Чтобы вставить ссылку на ленту в текст статьи, нужно использовать функцию парсера:
| + | |
− | | + | |
− | <pre>{{#listfeedurl:ИМЯ_ЛЕНТЫ}}</pre>
| + | |
− | | + | |
− | На данный момент доступны две опции, связанные с разбором дат элементов ленты.
| + | |
− | | + | |
− | === Опция date ===
| + | |
− | | + | |
− | <big><tt><listfeed '''date=<nowiki>"ВЫРАЖЕНИЕ"</nowiki>'''></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><listfeed '''headingdate=<nowiki>"ВЫРАЖЕНИЕ"</nowiki>'''></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>
| + | |
− | | + | |
− | * [[User:VitaliyFilippov|VitaliyFilippov]] 12:12, 17 февраля 2010 (UTC): Расширение упрощено и отлажено, написана [[ListFeed|справочная статья]].
| + | |
− | *: Отлажен разбор описаний лент, ликвидирована лишняя возможность сохранения старых записей в базе данных, так как она обеспечивалась большим количеством хитрой логики по определению изменившихся записей и эта логика всё равно не покрывала весь диапазон ситуаций, что вело к появлению дублированных записей.
| + | |
− | * [[User:VitaliyFilippov|VitaliyFilippov]] 16:02, 16 сентября 2009 (UTC): Тест раскрытия <nowiki>~~~~</nowiki> и вообще PreSaveTransform.
| + | |
− | * [[User:VitaliyFilippov|Виталий Филиппов]] 20:16, 29 июля 2009: Отлажено расширение [[ListFeed (MediaWiki)|ListFeed]]. Готово к использованию.
| + | |
− | * [[User:VitaliyFilippov|Виталий Филиппов]] 14:11, 29 июля 2009: Создано расширение [[ListFeed (MediaWiki)|ListFeed]]. Отлаживаю.
| + | |
− | *: (текст записи) ListFeed — расширение для MediaWiki, позволяющее генерировать простые RSS-ленты из списков.
| + | |
− | | + | |
− | <endlistfeed />
| + | |
− | | + | |
− | На выходе — вот такого вида лента: {{#listfeedurl:Новости расширения ListFeed}}.
| + | |
− | | + | |
− | [[Category:MediaWiki]] | + | |