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

Материал из Posmotrelisu
< Справочник автораСправочник автора/MediaWiki
Перейти к навигации Перейти к поиску
Строка 72: Строка 72:
* [https://www.mediawiki.org/wiki/Help:Magic_words#Parser_functions Функции парсера]. Так же фича которую можно использовать в обычных статьях, но чаще находит своё применение именно здесь.
* [https://www.mediawiki.org/wiki/Help:Magic_words#Parser_functions Функции парсера]. Так же фича которую можно использовать в обычных статьях, но чаще находит своё применение именно здесь.
* [https://www.mediawiki.org/wiki/Help:Templates#Parameters Параметры]. При помощи специальных конструкций можно оставлять поля в которые при размещении шаблона можно указать нужный вам кусок. Почти ничем не ограничены и могут подставляться буквально целые куски разметки, главное чтобы итоговый результат для парсера сошёлся.
* [https://www.mediawiki.org/wiki/Help:Templates#Parameters Параметры]. При помощи специальных конструкций можно оставлять поля в которые при размещении шаблона можно указать нужный вам кусок. Почти ничем не ограничены и могут подставляться буквально целые куски разметки, главное чтобы итоговый результат для парсера сошёлся.
* На нашей вики используется [https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions расширение фунций парсера]. Математические действия, сравнения, отработка исключений, сложные условия и многое другое. Мощный инструмент позволяющий создавать гараздо более комплексные шаблоны чем обычно.
* На нашей вики используется [https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions расширение фунций парсера]. Математические действия, сравнения, отработка исключений, сложные условия и многое другое. Мощный инструмент позволяющий создавать гораздо более комплексные шаблоны чем обычно.
* В шаблонах можно использовать скрипты на [https://www.lua.org/pil/contents.html Lua], но об этом в соответствующем разделе.


==== Сложности и ограничения ====
==== Сложности и ограничения ====

Версия 19:00, 16 августа 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

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

Вики-текст

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

Шаблоны

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

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

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

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

Синтаксис

В шаблонах можно применять следующие вещи:

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

Сложности и ограничения

Сложности:

  • Первая и самая большая сложность - читаемость! Посмотрев на некоторое сложные шаблоны, например Шаблон:Infobox, понимаешь что их редактирование требует умения копаться в тексте ведь функционала современных IDE не завезли. Тем кто программировал на C/C++ или других, подобных по внешнему виду, языках должно быть попроще разобраться во всех этих хитросплетениях скобочек.
  • Вторая сложность сильно способствующая первой - чувствительность парсера. В обычных языках программирования можно навести красивостей при помощи форматирования, но здесь, любой лишний символ считывается парсером и может разобрать вашу чудесную табличку или сделать не тот эффект которого вы ожидаете.

Ограничения:

  • Главное ограничение - невозможность бесконечной рекурсии. Сайт просто не позволит вставить шаблон если в результате этого он уйдёт в бесконечную рекурсию.

Основные понятия

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

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

Язык разметки

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

Шаблоны

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

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

Lua

Экзотика

Примечания

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