Справочник автора/MediaWiki: различия между версиями

Материал из Posmotrelisu
< Справочник автораСправочник автора/MediaWiki
Перейти к навигации Перейти к поиску
Строка 73: Строка 73:
В языке шаблонов не так уж и много элементов. В данный момент нас интересуют всего два:
В языке шаблонов не так уж и много элементов. В данный момент нас интересуют всего два:
# '''<nowiki>{{}}</nowiki>''' — (двойные фигурные скобки) включенное в них содержимое является '''вызовом шаблона'''.
# '''<nowiki>{{}}</nowiki>''' — (двойные фигурные скобки) включенное в них содержимое является '''вызовом шаблона'''.
# '''<nowiki>{{{}}}</nowiki>''' — (тройные фигурные скобки) включенное в неё содержимое является '''переменной''' внутри шаблона.
# '''<nowiki>{{{}}}</nowiki>''' — (тройные фигурные скобки) включенное в неё содержимое является '''параметром''' внутри шаблона.


Чуете, куда ведёт?
Чуете, куда ведёт?

Версия 15:52, 19 ноября 2024

MediaWiki — это открытый сайтовый движок, на котором работает множество википроектов — посмотрелка, википедия, викитропы и пр.

Серверная часть

Тут для работы движка важны по сути 3 вещи:

  1. Интерпретатор php — поскольку php это язык, на котором написана сама MediaWiki. Без комментариев.
  2. СУБД — система управления базой данных. Именно в ней хранятся правки, статьи, история, ники и прочее. По-умолчанию медиавики в качестве СУБД использует MariaDB или MySQL. Так же поддерживает PostgresSQL и SQLite. В старых версиях поддерживается OracleDB.
  3. Вебсервер с поддержкой PHP (чаще всего Apache2) — предоставляет файлы сайта для пользователей в интернете. Именно он позволяет получить доступ к сайту его посетителям. Он же может вызывать множество проблем если настроен криво.

От «свежести» этих 3 компонентов зависит какую версию движка можно установить.

На что обратить внимание будучи на сервере:

  • Файл LocalSettings.php — тут содержатся настройки работы медиавики — подключаемые расширения, настройки, интеграция с другими сервисами. В общем, много всего.
  • Папка extensions — сюда закидываются расширения, которые планируется установить.
  • Папка maintance — тут содержатся скрипты обслуживания медиавики на php. Обновить структуру БД, поменять пароль, много всего.

Клиентская часть

NB: программисты могут смело пропустить, ибо тут общие сведения в основном.

HTML

HTML — язык гипертекстовой разметки, на котором собственно выводятся все сайты. HTML — это скелет любой страницы, для наведения марафета используется CSS (см. ниже).

В целях безопасности Медиавики поддерживает далеко не все теги. К тому же отдельные расширения добавляют собственные теги, которые отсутствуют в базовом HTML. Например, многим известную связку <nowiki>…</nowiki> .

CSS

CSS — каскадная таблица стилей. По сути это, то что превращает голый текст с дозой списков и ссылок в нечто более красивое.

Медиавики по умолчанию поставляется с 3 стилями для проекта. Можно при желании установить и другие.

Что тут есть:

  • Общие таблицы. Применяется для всех пользователей попадающих под условие (нужная тема, группа). Их могут править только участники со специальными правами.
    • MediaWiki:Common.css — здесь можно менять общее оформление для вообще всех вариантов интерфейса, а также создавать новые классы CSS для последующего использования в страницах, шаблонах и пр.
    • Статьи вида MediaWiki:Тема.css — тоже что и выше, но для конкретной темы.
    • Статья вида MediaWiki:Группа_пользователей.css (например MediaWiki:Group-sysop.css) — то же что и выше, но для отдельных групп пользователей.
    • И другие
  • Персональные таблицы. Являются подстатьёй страницы участника и описывают таблицы применяемые к конкретному участнику. Отключены по умолчанию из-за того что некоторые браузеры позволяют через них пропихивать JS код, но об этом в блоке ниже

Без расширений и ухищрений CSS задается для элементов либо по ссылке выше, либо прямо в html-теге с помощью атрибута style.

JS

JavaScript — третий кит современной всемирной паутины. Если HТML это скелет, CSS это внешность, то JS может всем этим управлять, ежели воля программиста на то будет.

Что тут есть:

  • MediaWiki:Common.js — тут прописывается js-код, который автоматом подгружается для всех пользователей. Именно сюда записываются разнообразные свистоперделки наподобие реализации шаблона Вкладки. Доступ к редактированию по умолчанию строго ограничен.
  • Пользовательский js-код — позволяет участникам писать свои скрипты на все случаи жизни. На медиавики отключен по умолчанию, поскольку это очевидная дыра в безопасности.

jQuery

Медиавики по умолчанию подгружает jQuery.

jQuery — это библиотека на JS, которая фокусируется на взаимодействии JavaScript и HTML. Библиотека jQuery помогает легко получать доступ к любому элементу DOM, обращаться к атрибутам и содержимому элементов DOM, манипулировать ими. Также библиотека jQuery предоставляет удобный API для работы с AJAX.

Если без програмерской зауми, то jQuery упрощает программирование на связке HTML+CSS+JS, но это не точно.

Vue

Ещё один фреймворк для JS, который есть в поставке движка с версии 1.35.

Один из фокусов Vue — создание интерфейсов.

Как тут творить?

Вики-текст

В MediaWiki встроен «язык» позволяющий добавлять различные красивости на страницу — вики-разметка (Wiki markup). Почему в кавычках? Потому что по большому счёту вики-разметка — это надстройка над обычным HTML заменяющая его не понятную большинству нормальных людей систему тегов на более вразумительную (по мнению авторов) систему последовательностей символов. То есть это значит что при большом желании статьи на вики можно форматировать при помощи голого CSS и HTML, что порой приходится делать, когда парсер (часть сайта отвечающая за перевод вики-разметки в HTML и CSS) даёт сбои.

Шаблоны

« Любая достаточно сложная платформа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины Common Lisp[1] »
— Сжатая цитата для иллюстрации подраздела

Иногда возникают ситуации, когда нужно один и тот же кусок использовать в нескольких местах или разбить что-то большое на что-то маленькое. В нормальных языках программирования для этого используются функции, в вики-разметке используются шаблоны. Шаблон представляет собой статью находящуюся в специально выделенном пространстве имён и (опционально) подготовленную особым образом для вставки.

В простейшем виде шаблоны умеют только подставлять данные, которые в них передали. Такого функционала явно не хватало и пошло-поехало.

  • Одни начали «ломать» этот язык, используя неочевидную логику шаблонов для работы. Условные ветвления, обход ограничения на рекурсию[2] — по сути это хакерство[3].
  • Другие начали подключать расширения, которые добавляли языку шаблонов новые управляющие конструкции.

Синтаксис

В языке шаблонов не так уж и много элементов. В данный момент нас интересуют всего два:

  1. {{}} — (двойные фигурные скобки) включенное в них содержимое является вызовом шаблона.
  2. {{{}}} — (тройные фигурные скобки) включенное в неё содержимое является параметром внутри шаблона.

Чуете, куда ведёт?

Что можно применять в шаблонах:

  • Разметка, HTML и CSS. Так как шаблон является обычной статьёй, то он поддерживает всё тоже самое что и обычная статья.
  • Функции парсера. Так же фича которую можно использовать в обычных статьях, но чаще находит своё применение именно здесь.
  • Параметры. При помощи специальных конструкций можно оставлять поля в которые при размещении шаблона можно указать нужный вам кусок. Почти ничем не ограничены и могут подставляться буквально целые куски разметки, главное чтобы итоговый результат для парсера сошёлся.
  • Расширенные функции парсера. Математические действия, сравнения, отработка исключений, сложные условия и многое другое. Мощный инструмент позволяющий создавать гораздо более комплексные шаблоны чем обычно. Расширение поставляется вместе с самой медиавики, просто включите и наслаждайтесь.
  • В шаблонах можно использовать скрипты написанные на Lua, но об этом в соответствующем разделе.

Сложности

  • Первая и самая большая сложность — читаемость! Посмотрев на некоторое сложные шаблоны, например Шаблон:Infobox, понимаешь что их редактирование требует умения копаться в тексте ведь функционала современных IDE не завезли. Не даром вверху приведена цитата с Лиспом. Тем, кто программировал на C/C++ или других подобных по внешнему виду языках, должно быть попроще разобраться во всех этих хитросплетениях скобочек.
  • Вторая сложность сильно способствующая первой — чувствительность парсера. В обычных языках программирования читаемость обеспечивается форматированием — пробелами, отступами и прочим. Но здесь, любой лишний символ считывается парсером и может превратить ваш лучший шаблон в бяку.
  • Третье — кастрированность языка. Без расширений язык мало что может. Циклы? Рекурсия? Лямбды[4]? Условные ветвления? Пфф, ставь расширения, смерд. На самом деле это неудивительно, ведь язык шаблонов изначально и не был на такое рассчитан.

Проще говоря, язык шаблонов крайне плохой, поскольку вынуждает программиста говнокодить.

Lua

Где-то с 2015 года стал поставляться вместе с медиавики, став таким образом чем-то вроде языка программирования по умолчанию. Просто подключаем расширение в LocalSettings.php и изучаем язык.

Тут и читаемость и многие программерские штучки-дрючки. Без своих специфических недостатков, правда, не обошлось.

В любом случае, на Lua делать шаблоны проще, чем на языке фигурных скобочек.

Экзотика

Тут перечислены другие ЯП для продвинутого создания шаблонов и фич.

  • PHP — есть расширение, которое позволяет писать код этом языке программирования.
  • Widgets — это расширение предназначено для вставки произвольного кода. Знаете, там, карты, видео загрузить и пр. Но код-то можно вставить произвольный. Ничего не мешает запилить логику на JS, а всё остальное на HTML и CSS, причём разграничив всё друг от друга для удобства.

Права участников

По умолчанию в сайтах на двжике MediaWiki есть следующие группы пользователей:

Анонимы

Могут создавать и редактировать статьи и обсуждения к ним. Но анонимы по понятным причинам не могут стать администраторами, например.

Участники

Могут создавать и редактировать статьи и обсуждения к ним.

Эта группа «особая» в техническом плане, поскольку она прямо вот зашита в движок. Проще говоря, эта группа есть всегда и выпилить её отдельное приключение.

NB: В MediaWiki действует принцип наследования прав — то есть все иные группы имеют те же права, что и участники, но с отдельными дополнениями/исключениями. Таким образом, если убрать у участников какие-либо права, то они исчезнут у всех других групп. Так что при изменении прав участников не забудьте продублировать допуски у других групп, если это требуется.

Автоподтверждённые участники

Могут редактировать статьи, у которых выставлена защита уровня «разрешено только автоподтверждённым участникам».

Это неявная группа — то есть статус выставляется автоматически.

Как правило, для попадания в эту группу необходимо сделать n-е количество правок за n-е количество дней. Можно сказать, защита от вандалов.

Администраторы

Имеют право на переименование и удаление статей, а также бан обычных участников и анонимов.

Администраторы интерфейса

А вот эти товарищи могут править служебные страницы типа MediaWiki:Common.css. Обычно выдают админам, которые умеют программировать.

Скрывающие

Группа, которая может скрывать данные.

Зачем надо:

Бюрократы

Администраторы рангом повыше. Именно они назначают различных администраторов и имеют право лишить их флагов.

Организация информации

Пространства имён

Базовый способ разграничения статей в МедиаВики, причём деление происходит по типу и роли страниц.
Все пространства имён (кроме основного) отделяются от статей двоеточием :

Рассмотрим некоторые пространства имён, которые есть на любом вики-проекте

Основное пространство

Именно в нём и находится 80 % всех статей на сайте. Основное пространство никак не обозначается.

Участник / User

Это пространство, как не сложно догадаться, участников.

При создании учётки также неявно создаётся и статья об участнике. Именно благодаря этому можно посмотреть вклад участника, его права и пр.

{{SITENAME}} / Project

В этом прастранстве обычно помещаются различные справочные юридические тексты:

  • Правила
  • Отказ от ответсвенности
  • и т. д.

Справка / Help

Выделенное пространство имён для хранения различных гайдлайнов.

Файл / File

Все загруженные на сайт файлы получают страницу с описанием. Такие страницы хранятся именно тут.

Медиа / Media

А вот тут уже хранятся сами файлы. В статьях почти не используется и вынесено больше для справочной информации.

Категория / Category

Группа автоматически создаваемых страниц. Каждая страница содержит в себе список ссылок на статьи. Для того чтобы статья попала в конкретную категорию требуется её ей прописать определённым образом. Является немного урезанным аналогом системы тегов.

Шаблон / Template

Тут cодержатся статьи представляющие из себя шаблоны. Именно это пространство считается пространством по умолчанию при трансклюзии. О самих шаблонах было выше.

Модуль / Module

Пространство имён создаваемое расширением Scribunto. В нём содержаться подключаемые блоки языка Lua используемые для генерирования шаблонов.

Служебная / Special

Отдельный раздел где хранятся страницы генерируемые сайтом и используемые для поиска, фильтрации информации, а так же контролем и управлением за сайтом. Подробнее тут

MediaWiki

В этом пространтстве находятся статьи с различными настройками сайта. Его могут редактировать только администраторы, а некоторые статьи только администраторы интерфейса.

Вот несколько примеров:

  • Боковое меню сайта
  • Названия ролей
  • Куски CSS кода для сайта целиком или конкретных шаблонов
  • Куски JavaScript кода
  • Тысячи их! Почти весь текст за пределами тела статей можно править на таких страницах.

Обсуждение / Talk

Это даже не одно пространство, а целая куча пространств для других пространств. У каждого выше описанного пространства, кроме Медиа, есть своё такое:

  • Для основного пространства — Обсуждение: / Talk:
  • Для пространства участников — Обсуждение участника: / User talk:
  • Много их!

При этом ничем друг от друга кроме префикса они не отличаются.

Категории

Пройдёмся по категориям чуть подробнее.

Что это?

Система позволяющая группировать статьи по определённым «тегам», именуемым категориями. Как только на страницу помещается тег, а он может помещаться как в тело статьи, так и добавляться шаблонами, если последние правильно написаны, он начинает отображаться внизу страницы. Страница категории может как существовать, так и отсутствовать:

  • В первом случае название категории внизу страницы будет синим или фиолетовым (это значение по умолчанию и зависит от ваших настроек в браузере и на сайте), и кликнув по ней вы окажитесь на странице название которой будет соответствовать названию категории. Страница находится в соответствующем пространстве имён. Текст статьи будет состоять из краткого описания вверху статьи (опционально) и списка статей в альфавитном порядке помеченных данной категорией.
  • Во втором случае название категории будет красного цвета (опять же зависит от настроек). При переходе по этой ссылке вам откроется страница создания страницы категории, но не стоит боятся. Вы сможете ей воспользоваться без проблем, так как список ссылок будет на месте. Вы сделаете доброе дело если добавите краткое описание категории и завершите создание страницы, но мы совершенно не требуем этого.

Как этим пользоваться

Для присвоение статье какой-то категории где-либо (обычно делают в конце страницы) должен быть помещён текст:

[[Категория:Название категории]]

Перед присвоением ранее не встречаемой вами категории, пожалуйста убедитесь что не создаёте дубликат. Инструмент чувствителен к регистру и знакам препинания.

Вы без проблем можете поместить статью в несколько категорий. Просто повторите текст выше несколько раз с разными названиями.

Подстраницы

Достаточно интересный инструмент позволяющий несколько упростить структуру вики.

Что это?

Представим ситуацию. У нас есть корневая страница… Пусть будет статья о книге. И нам вдруг захотелось добавить статью о персонаже в этой книге. Вы можете создать эту страницу отдельно, а можете, при помощи правильного названия, сделать её подстраницей открыв себе несколько интересных возможностей о которых будет сказано ниже. Основной целью существования подстраниц является структуризация информации. Подстраницы всегда связываются ссылкой с исходной страницей и образуют этакое «дерево» статей идущее от самой детальной части (в нашем примере это статья о персонаже) к самой общей (статья о книге). Есть специальные расширения позволяющие эту древовидную структуру отображать.

Как сделать страницу подстраницей?

Тут всё очень просто, особенно если понимаете как работает файловая система (проводник) в Windows (а если шарите за linux то ещё лучше).

Для добавления подстраницы или превращения страницы в подстраницу нам нужно к названию будущей подстраницы добавить её родительскую страницу и специальный разделитель / .

Вот пример:

У нас есть статья "Книга" и мы хотим создать ей статью "Персонаж". Тогда статья "Персонаж" должна названа как "Книга/Персонаж"

Что мне это даст?

  • Во-первых в верху подстатей всегда содержится ссылка на родительскую статью уровнем выше (примеры можете изучить в справочнике автора).
  • Во-вторых ссылки на подстатью из корневой статьи могут носить упрощённый характер. Им не требуется указывать родительскую статью, а только разделитель и название подстатьи:
Вместо [[Книга/Персонаж]] можно указать [[/Персонаж]]

Недостающий кусочек сайт подставит сам. Это можно очень интересно использовать в шаблонах, например в шаблоне Шаблон:Infobox используется такая фича для генерации типичных подстатей к статья о произведениях.

Типичные примеры использования

  • Архивы чего бы то ни было.
  • Создание черновых страниц (да можно создавать подстатью страницы участника). Очень удобный инструмент если не хочется выкидывать обрубок статьи на всеобщее обозрение.
  • Создание переводов статей на другие языки
  • Создание страниц документации, примеров применения шаблонов, а так же песочницы для их обкатки.

Маленькие подсказочки

  • Можно найти все подстраницы по корневой странице. Для этого существует Служебная:Указатель по началу названия
  • Вы можете включить все подстраницы какой-то корневой страницы, если есть такая потребность. Для этого достаточно в коде страницы вставить следующую конструкцию:
{{Служебная:Указатель по началу названия/Название корневой страницы}}
  • Вы можете вывести полный перечень всех подстраниц текущей страницы если воспользуетесь волшебным словом {{FULLPAGENAME}}. Не забудьте в конце добавить / чтобы не включить корневую статью в выборку.
{{Служебная:Указатель по началу названия/{{FULLPAGENAME}}/}}
  • Вы можете добавить несколько параметров чтобы исключить отображение перенаправлений и убрать название корневой статьи оставив только красивое название подстатьи.
{{Служебная:Указатель по началу названия/{{FULLPAGENAME}}/ |hideredirects=1 |stripprefix=1}}
  • Подстраницы создают слишком длинные названия. Вы можете изменить отображаемое имя полностью используя волшебное слово {{DIPLAYTITLE: Новое название}}, однако если вы просто хотите отсечь всё что идёт до названия подстраницы можете использовать конструкцию вида {{DISPLAYTITLE: {{SUBPAGENAME}}}}

Навигационные таблицы

Навигационные таблицы это шаблоны, в которых указываются ссылки на статьи. Группировка статей в таблице на ваше усмотрение.

Строго говоря, это фанон, поскольку навигационные таблицы не входят в поставку МедиаВики. Тем не менее таблицы навигации встречаются повсеместно на википроектах.

На каждом проекте нав. таблицы реализуются самостоятельно или в дело идёт копипаст с других проектов. Например, на этом сайте сабж реализован на Lua.

Примечания

  1. В том числе и сам Common Lisp – шутка программистов.
  2. Запрет нужен, чтобы страница и сервер не зависли.
  3. Небольшой ликбез: Хакерство многозначный термин. В данном случае подразумевается использование языка не по прямому назначению, что вызывает сложности в понимании, поддержке и пр.
  4. имеются ввиду безымянные шаблоны-функции внутри шаблона