SubPageList (MediaWiki) — различия между версиями
(→Шаблонизированный вывод) |
|||
Строка 2: | Строка 2: | ||
На основе расширения MediaWiki [[mediawikiwiki:Extension:SubPageList2|SubPageList2]] в [[{{SITENAME}}]] я породил собственную вариацию на тему SubPageList’а — его можно было бы назвать «TemplatedPageList». По сути расширение продолжает серию расширений, направленных в сторону вики-программирования, что идеологически ещё неизвестно, хорошо ли, нет ли. | На основе расширения MediaWiki [[mediawikiwiki:Extension:SubPageList2|SubPageList2]] в [[{{SITENAME}}]] я породил собственную вариацию на тему SubPageList’а — его можно было бы назвать «TemplatedPageList». По сути расширение продолжает серию расширений, направленных в сторону вики-программирования, что идеологически ещё неизвестно, хорошо ли, нет ли. | ||
+ | |||
+ | {{note}} ''Мне очень стыдно: я взялся за доработку SubPageList’а, а не [[mediawikiwiki:Extension:DynamicPageList_(third-party)|DynamicPageList]]'а, который, кстати, сам вырос из SubPageList’а тем же путём, что и моя вариация на тему. Тем не менее, мой экстенжн умеет то, чего не умеет DynamicPageList: шаблонизированный вывод… Кроме того, DynamicPageList — это, конечно, кромешный ад по навороченности…'' | ||
Так или иначе, код расширения переписан в хлам — предыдущий автор, видимо, был, во-первых, C’шник, а во-вторых, большой любитель избыточности в духе округления целых чисел (<tt>round(intval($options['count']))</tt>). ''(а ещё — пробелов после открывающихся и до закрывающихся скобочек… брррр).'' Всё это было выгашено из кода сраной метлой, показатель — количество строк кода, уменьшившееся почти в два раза — с примерно 680 до примерно 350 строк. | Так или иначе, код расширения переписан в хлам — предыдущий автор, видимо, был, во-первых, C’шник, а во-вторых, большой любитель избыточности в духе округления целых чисел (<tt>round(intval($options['count']))</tt>). ''(а ещё — пробелов после открывающихся и до закрывающихся скобочек… брррр).'' Всё это было выгашено из кода сраной метлой, показатель — количество строк кода, уменьшившееся почти в два раза — с примерно 680 до примерно 350 строк. |
Версия 03:12, 13 ноября 2009
Ссылка на SVN исходников: http://svn.yourcmc.ru/viewvc.py/vitalif/trunk/MediaWiki-SubPageList2/.
На основе расширения MediaWiki SubPageList2 в YourcmcWiki я породил собственную вариацию на тему SubPageList’а — его можно было бы назвать «TemplatedPageList». По сути расширение продолжает серию расширений, направленных в сторону вики-программирования, что идеологически ещё неизвестно, хорошо ли, нет ли.
Мне очень стыдно: я взялся за доработку SubPageList’а, а не DynamicPageList'а, который, кстати, сам вырос из SubPageList’а тем же путём, что и моя вариация на тему. Тем не менее, мой экстенжн умеет то, чего не умеет DynamicPageList: шаблонизированный вывод… Кроме того, DynamicPageList — это, конечно, кромешный ад по навороченности…
Так или иначе, код расширения переписан в хлам — предыдущий автор, видимо, был, во-первых, C’шник, а во-вторых, большой любитель избыточности в духе округления целых чисел (round(intval($options['count']))). (а ещё — пробелов после открывающихся и до закрывающихся скобочек… брррр). Всё это было выгашено из кода сраной метлой, показатель — количество строк кода, уменьшившееся почти в два раза — с примерно 680 до примерно 350 строк.
Список изменений
Функционала при этом стало больше:
- Опция category= теперь ведёт себя более разумно — ограничивает выбираемый список категорией. Кроме того, выбирать теперь можно как по префиску, так и по категории БЕЗ указания префикса.
- Добавлена опция offset=, позволяющая указывать не только максимальное количество выбираемых страниц, а также и «смещение» от начала списка.
- Теперь разрешается выборка из всех пространств имён сразу: namespace="".
- Теперь разрешается выборка не только подстраниц, а вообще страниц по любому префиксу названия (опция parent=).
- Опция deepness= теперь, во-первых, работает корректно, а во-вторых, допускает значение-диапазон: deepness=1..2 — то есть, можно накладывать ограничение уровня вложенности на выбираемые страницы. Если deepness= просто числу — оно воспринимается, как минимальная вложенность. Также теперь разрешается выборка страниц только по условию уровня вложенности без учёта других условий (parent= и category=).
- Добавлено препроцессирование кода включаемых страниц, то есть корректная обработка магических слов (типа PAGENAME и REVISIONDAY) и тегов <noinclude> и <includeonly>.
- Добавлен метод сортировки списка страниц по количеству посещений — ordermethod=pagecounter.
- Исправлена ошибка, возникавшая при просмотре различий по странице, использующей тег <subpages>.
- Вывод расширения больше не кэшируется и нет нужды нажимать «Обновить» или пересохранять статью, чтобы увидеть изменения. Нет ошибок с подстановкой UNIQ… в текст статьи.
Шаблонизированный вывод
Но самое главное, что расширение теперь работает на шаблонах — оцпией template= передаётся имя шаблона, который будет обработан для каждой страницы и дописан в текст. По умолчанию выбирается шаблон с названием, идентичным статье, использующей тег <subpagelist>, но в пространстве имён «Шаблон:».
Шаблону передаются следующие параметры:
- index
- Номер страницы в списке, начиная с 0.
- number
- Номер страницы в списке, начиная с 1.
- odd
- 1, если номер страницы нечётный (начиная с 1), и 0 иначе.
- title_full
- Полное название страницы.
- title
- Полное название без пространства имён.
- title_rel
- Название страницы без названия родительской страницы.
- title_last
- Последняя секция названия страницы (да, я знаю, что это можно сделать через Parser Functions).
- content
- Полное содержимое страницы.
- first_section
- Первая секция страницы.
- has_more
- 1, если страница имеет секции, кроме первой, и 0 иначе.
TODO
Что ещё хотелось бы сделать (а возможно, я это и сделаю в ближайшее время):
- Отслеживать вхождения тега <subpages> на страницах и сохранять их в БД, а при добавлении и изменении страниц автоматически менять зависимые страницы.
- Немного переименовать параметры шаблона, дабы они стали более «стандартными»: не title_full, а fullpagename и т. п.