MediaWiki

Материал из Posmotrelisu
< Справочник автораСправочник автора/MediaWiki
Перейти к навигации Перейти к поиску
Ну погоди волк с медалью.jpgМолодцы!
Эта статья была номинирована на статус избранной. В связи с этим мы особенно тщательно относимся к её содержанию. Подробнее о выборах избранной статьи вы можете узнать здесь
MediaWiki-2020-large-icon.png

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[править]

Тут содержатся статьи, которые можно включать в другие, с помощью двойных фигурных скобок – {{ и }}.

В принципе, любую статью можно использовать как шаблон. Для этого надо поставить двоеточие в фигурных скобках – вот так {{:Сепульки}}. В Медиавики это называется трансклюзией.

Служебная / Special[править]

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

MediaWiki[править]

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

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

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

Обсуждение / Talk[править]

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

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

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

Иные пространства[править]

Пространства можно прописать вручную в LocalSettings.php. Также некоторые пространства появляются после подключения расширений.

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

Категории[править]

Категории — это механизм группировки статей по определённым «тегам»[5]. Как только на страницу помещается тег, а он может помещаться как в тело статьи, так и добавляться шаблонами, если последние правильно написаны, он начинает отображаться внизу страницы.

Страница категории, как и страница участника, является «виртуальным» объектом — она есть, даже если её нет. Таким образом, кликнув даже на красную ссылку категории, она будет работать.

Для присвоения статьи какой-то категории должен быть помещён текст: [[Категория:Название категории]]. Обычно добавляют в конце страницы.

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

Подстраницы[править]

Создание подстраниц по умолчанию действует только в пространстве шаблонов и участников, в основном пространстве отключён.

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

Что даёт:

  • Структурирование информации. Например, если хочется сделать статью о персонаже в произведении. Mass Effect и Mass Effect/Shepard. Меньше вероятности, что информация затеряется.
  • Упрощённые ссылки. Можно писать ссылку на подстраницу в упращенном виде. Не [[Mass Effect/Shepard]], а просто [[/Shepard]], например.
  • Вверху подстатей будет ссылка на родительскую статью уровнем выше[6] (примеры можете изучить в справочнике автора).
  • Можно включить в какую-нибудь страницу все подстраницы любой корневой страницы, если есть такая потребность. Для этого надо вставить следующую конструкцию: {{Служебная:Указатель по началу названия/Название корневой страницы}}.

Где может использоваться:

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

Навигационные таблицы[править]

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

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

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

Примечания[править]

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