Difference between revisions of "TemplatedPageList/ru"

From Wiki4Intranet
Jump to: navigation, search
(Split extension page to semantic data and russian description)
 
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
{{ExtensionFromInfo|lang=ru|name=TemplatedPageList}}
 
{{ExtensionFromInfo|lang=ru|name=TemplatedPageList}}
== Features ==
+
[[Category:Неполные описания расширений]]
  
This is Yet Another Page Listing extension. It is similar to DynamicPageList & company ([[mediawikiwiki:Extension:DynamicPageList (Wikimedia)|Intersection / Wikimedia’s DPL]], [[mediawikiwiki:Extension:DynamicPageList (third-party)|3rd party’s DPL]], [[mediawikiwiki:Extension:SubPageList|SubPageList]], [[mediawikiwiki:Extension:SubPageList2|SubPageList2]], [[mediawikiwiki:Extension:SubPageList2|SubPageList3]], etc), but the code is simpler and the functionality is more advanced.
+
== Использование, установка ==
  
Initially, it was just an improved [[mediawikiwiki:Extension:SubPageList2|SubPageList2]]. Then it survived several feature additions and refactorings (previous authors probably were C-coders and big lovers of rounding integers (<tt>round(intval($options['count']))</tt>)).
+
См. [[TemplatedPageList/|английскую справку]].
  
Features:
+
== Идея: кэширование ==
* (Main feature) '''&lt;subpagelist&gt;''' tag produces a simple or ''templated'' list of pages selected by dynamic conditions.
+
* Special page with form interface to &lt;subpagelist&gt; ([[Special:TemplatedPageList]])
+
* <nowiki>{{#getsection|Title|section number}}</nowiki> parser function for extracting page sections by number.
+
* Automatic AJAX display of subpages everywhere.
+
  
TODO:
+
Суть: кэшировать страницы со списками, сохранять зависимости списков в базу и инвалидировать кэш списков по зависимостям. После чего можно будет широко использовать эти списки — повысится производительность.
* Support «materialization» of lists in the DB, enable caching and support correct refreshing of parser cache by saving dependencies into database.
+
  
== Automatic subpage listing ==
+
Правда, [[IntraACL]] портит малину
 +
* а) тотальным разделением кэша для разных пользователей, так как у них могут быть разные права и
 +
* б) диким количеством запросов при проверке прав. Это всё, правда, лечится только рефакторингом IntraACL, который в данный момент в процессе.
  
'''TemplatedPageList''' can add a simple link to each page, and when clicked, this link displays list of all subpages of current page.
+
Второй вариант — не использовать стандартный кэш для списков, а поддерживать в базе данных сами списки, инкрементально обновляя их содержимое по зависимостям. Но в данном случае для нормального выигрыша по производительности нужно кэшировать именно готовый текст каждого пункта списка. В этом случае не надо отслеживать зависимостей от сортировки и не надо делить кэш по правам IntraACL — просто при выводе их нужно проверять.
  
<tt>$egSubpagelistAjaxNamespaces = array(NS_MAIN => true);</tt> setting enables this on namespaces specified.
+
Типы зависимостей:
 +
* Пространство имён
 +
* Категория
 +
* Префикс
 +
* Сортировка
 +
* Шаблон списка
  
<tt>$egSubpagelistAjaxDisableRE = "regexp";</tt> is a regexp disables this on pages whose title match it.
+
Зависимости:
 +
* Создание/удаление/переименование страницы &rArr; сбрасываем списки по всем относящимся к странице зависимостям
 +
* При изменении categorylinks в LinksUpdate &rArr; сбрасываем списки по категориям
 +
* При изменении шаблона &rArr; сбрасываем списки, использующие этот шаблон
  
== <nowiki>{{#getsection}}</nowiki> ==
+
По сортировке:
 
+
* При каждой правке страницы &rArr; сбрасываем сортируемые по lastedit, user, size списки по всем относящимся к странице зависимостям
If you want to include first section of page, use the following instruction:
+
* При каждом показе страницы &rArr; сбрасываем сортируемые по popularity списки по всем относящимся к странице зависимостям
 
+
*: Либо при сортировке popularity вообще не кэшируем список
<pre><includeonly>{{#getsection:0|{{:{{FULLPAGENAME}}|here|you|can|pass|parameters}}}}</includeonly></pre>
+
* В расширении [[FavRate]] при голосовании за страницу &rArr; сбрасываем сортируемые по rating списки по всем относящимся к странице зависимостям
 
+
== &lt;subpagelist&gt; syntax ==
+
 
+
Syntax is backwards compatible with [[mediawikiwiki:Extension:DynamicPageList_(Wikimedia)|Wikimedia’s DynamicPageList]] syntax,
+
except for 'firstcategorydate' related stuff. The text inside <tt>&lt;subpagelist&gt;</tt>
+
is preprocessed, so you can use templates, magic words and parser functions
+
inside it. Options are specified one per line.
+
 
+
=== Open the tag or parser function ===
+
 
+
'''<tt>&lt;templatedpagelist&gt;</tt>''' (you can also use one of &lt;subpagelist&gt;, &lt;DynamicPageList&gt; or &lt;subpages&gt; for compatibility)
+
 
+
or
+
 
+
'''<tt><nowiki>{{#templatedpagelist:</nowiki></tt>'''
+
 
+
=== Page selection ===
+
 
+
; namespace = Main|Talk|…: Restrict list to some namespaces
+
; category = A|B|C<br /> category = D|E: Restrict page list to pages which are in one of these categories. This option may be specified multiple times, following occurrences will be appended as a conjunction, i.e., the resulting expression will be (A or B or C) & (D or E). This is compatible with Wikimedia’s DynamicPageList syntax, but allows more complex queries.
+
; subcategory = F|G: Like previous, but recursively including all subcategories of F and G.
+
; notcategory = A: Exclude pages which are in category A.
+
; notsubcategory = B: Exclude pages from category B and all its subcategories.
+
; parent = P: Restrict listing to subpages of P.
+
; prefix = P: Restrict listing to pages whose title starts with P. I.e. '''<tt>parent=P</tt>''' is equivalent to '''<tt>prefix=P/</tt>'''.
+
; level = L or MIN..MAX: Set wanted subpage nesting levels (i.e. number of '/' in title) it must be equal to L or be within MIN..MAX.
+
; deepness = D or MIN..MAX: Set wanted subpage nesting levels, relative to parent.
+
; ignore = L1|L2|…: Ignore pages which match L1 or L2 or … LIKE patterns:
+
:* '\_' and ' ' match single space.
+
:* '_' matches any single character.
+
:* '%' matches any substring.
+
:* '\%' matches single '%' character.
+
; redirect = yes|no: restring listing to redirect or non-redirect pages.
+
 
+
=== Ordering ===
+
 
+
;order|ordermethod = Y1 [asc|desc],Y2 [asc|desc],…: Sort pages by Y1,Y2,…, asc|desc can be specified right after Yi, each Yi is one of:
+
:* title|fullpagename
+
:* titlewithoutnamespace|pagename
+
:* lastedit
+
:* user
+
:* creation|firstedit
+
:* length|size
+
:* popularity|pagecounter
+
; order = ASC or DESC: Ascending or descending sort order for all Yi (compatibility)
+
; count|limit = N: Show at most N pages
+
; offset = M: Skip first M pages
+
 
+
=== Output ===
+
 
+
;showtotal = yes|no: Show (or not) total count of found pages. Don't show by default.
+
;output = simple|column|template: Select output method.
+
:* Simple is just a bullet-list with page titles and links.
+
:* Column is a 3-column grouped view, just as on MediaWiki category pages.
+
:* Templated view uses template for display. See 'template' option.
+
;template = X: Use template:X for output. The template will be preprocessed just like when included into listed article. I.e. all standard MediaWiki magic variables (<nowiki>{{PAGENAME}} {{REVISIONDAY}}</nowiki> etc) will generate values corresponding to listed articles. Additionally, the following parameters are passed to this template:
+
:; <nowiki>{{{</nowiki>index}}} : list index, beginning at 0
+
:; <nowiki>{{{</nowiki>number}}} : list index, beginning at 1
+
:; <nowiki>{{{</nowiki>odd}}} : is <nowiki>{{{</nowiki>number}}} odd? (1 or 0)
+
:; <nowiki>{{{</nowiki>ns_N}}} : N is namespace index, value is 1
+
:; <nowiki>{{{</nowiki>title}}} : full title
+
:; <nowiki>{{{</nowiki>title_rel}}} : title relative to parent specified in options
+
; suppresserrors|noerrors|silent = true: Suppress errors.
+
 
+
=== Close tag / PF ===
+
 
+
'''<tt>&lt;/templatedpagelist&gt;</tt>'''
+
 
+
or
+
 
+
'''<tt><nowiki>}}</nowiki></tt>'''
+
 
+
== Installation ==
+
 
+
You just need to add the following to LocalSettings.php:
+
 
+
<code-php>
+
require_once "$IP/extensions/TemplatedPageList/TemplatedPageList.php";
+
</code-php>
+

Latest revision as of 18:43, 27 August 2013

TemplatedPageList — расширение MediaWiki.

  • Назначение: Наше расширение для вывода списков вики-страниц. Похоже на DPL, поддерживает вывод по шаблону и имеет интерфейс на спецстранице.
  • Репозиторий: https://github.com/mediawiki4intranet/TemplatedPageList
  • Домашняя страница: http://wiki.4intra.net/TemplatedPageList 
  • Авторы: User:VitaliyFilippov
  • Лицензия: GPLv2.0+ 
  • Дата создания: 2009-11-09 
  • Последняя версия: 2012-12-12 
  • Оценка расширения: Вероятно полезное (4)

Включение в сборку Mediawiki4Intranet:

  • Дата включения: 2009-11-09
  • Включённая версия: последняя
  • Состояние доработок: Создано в рамках MediaWiki4Intranet

Использование, установка

См. английскую справку.

Идея: кэширование

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

Правда, IntraACL портит малину

  • а) тотальным разделением кэша для разных пользователей, так как у них могут быть разные права и
  • б) диким количеством запросов при проверке прав. Это всё, правда, лечится только рефакторингом IntraACL, который в данный момент в процессе.

Второй вариант — не использовать стандартный кэш для списков, а поддерживать в базе данных сами списки, инкрементально обновляя их содержимое по зависимостям. Но в данном случае для нормального выигрыша по производительности нужно кэшировать именно готовый текст каждого пункта списка. В этом случае не надо отслеживать зависимостей от сортировки и не надо делить кэш по правам IntraACL — просто при выводе их нужно проверять.

Типы зависимостей:

  • Пространство имён
  • Категория
  • Префикс
  • Сортировка
  • Шаблон списка

Зависимости:

  • Создание/удаление/переименование страницы ⇒ сбрасываем списки по всем относящимся к странице зависимостям
  • При изменении categorylinks в LinksUpdate ⇒ сбрасываем списки по категориям
  • При изменении шаблона ⇒ сбрасываем списки, использующие этот шаблон

По сортировке:

  • При каждой правке страницы ⇒ сбрасываем сортируемые по lastedit, user, size списки по всем относящимся к странице зависимостям
  • При каждом показе страницы ⇒ сбрасываем сортируемые по popularity списки по всем относящимся к странице зависимостям
    Либо при сортировке popularity вообще не кэшируем список
  • В расширении FavRate при голосовании за страницу ⇒ сбрасываем сортируемые по rating списки по всем относящимся к странице зависимостям