Библиотека сайта rus-linux.net
MediaWiki
Глава 12 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: MediaWiki
Автор: Sumana Harihareswara, Guillaume Paumier
Перевод: А.Панин
12.8. Модификации и расширение возможностей MediaWiki
Уровни доступа
- Системные администраторы могут устанавливать расширения и оболочки, настраивать отдельные вспомогательные программы wiki (т.е., программы для создания миниатюр изображений и преобразования документов в формате TeX), а также изменять глобальные настройки (обратитесь к разделу "Конфигурация" выше).
- Зарегистрированные пользователи wiki из группы "sysops" (иногда также называемые "администраторы") могут редактировать гаджеты, настройки сценариев JavaScript и таблиц стилей CSS в рамках сайта.
- Любой зарегистрированный пользователь может настроить принцип работы приложения и пользовательский интерфейс по своему усмотрению (изменить существующие настройки, оболочки и гаджеты) или сделать свои собственные модификации (используя свои персональные настройки сценариев JS и стилей CSS на страницах).
Внешние программы также могут взаимодействовать с приложением MediaWiki посредством его системного API и, в случае его активации, сделать возможным доступ пользователя практически к любой функции и любым данным.
JavaScript и CSS
Приложение MediaWiki может читать и использовать сценарии JavaScript и таблицы стилей CSS на уровне сайта или оболочки с помощью специальных страниц wiki; эти страницы находятся в пространстве имен MediaWiki:
и, таким образом, могут редактироваться только пользователями группы "sysops"; например, модификации сценария JavaScript с использованием страницы MediaWiki:Common.js
повлияют на все оболочки, модификации таблицы стилей CSS с использованием страницы MediaWiki:Common.css
также повлияют на все оболочки, но модификации таблицы стилей CSS с использованием страницы MediaWiki:Vector.css
повлияют исключительно на пользователей оболочки с названием "Vector".
Пользователи могут совершать подобные модификации, которые будут затрагивать только используемый ими интерфейс путем редактирования подстраниц их пользовательской страницы (т.е., User:<Имя пользователя>/common.js
для изменения сценария JavaScript всех оболочек, User:<Имя пользователя>/common.css
для изменения таблицы стилей CSS всех оболочек или User:<Имя пользователя>/vector.css
для изменения таблицы стилей CSS оболочки под названием "Vector").
В том случае, если установлено расширение "Gadgets", пользователи из группы "sysops" могут также редактировать гаджеты, т.е., фрагменты кода на языке JavaScript, реализующие функции, которые могут быть включены и выключены пользователями с помощью их страницы настроек. Грядущие разработки в области гаджетов позволят различным разделам wiki совместно использовать гаджеты, что позволит избежать дублирования кода.
Этот набор инструментов имел большой успех и значительным образом повысил степень демократичности процесса разработки приложения MediaWiki. Отдельные разработчики имеют возможность самостоятельно добавлять функции; опытные пользователи могут делиться своими наработками с окружающими, обе группы делают это неофициально с помощью глобально настраиваемых систем, контролируемых пользователями из группы "sysops". Этот фреймворк идеален для небольших, не затрагивающих сторонние системы модификаций и предоставляет более низкий порог вхождения для разработчиков в отличие от сложных модификаций кода с использованием расширений и точек вызова функций.
Расширения и оболочки
Когда модификаций сценариев JavaScript и таблиц стилей CSS не достаточно, приложение MediaWiki предлагает использовать систему точек вызова функций, позволяющую сторонним разработчикам выполнять специфический код на языке PHP перед, после или вместо кода из состава приложения MediaWiki для обработки определенных событий. (Точки вызова функций приложения MediaWiki описаны в документе, расположенном по адресу https://www.mediawiki.org/wiki/Manual:Hooks.) Расширения приложения MediaWiki используют точки вызова функций для внедрения в код.
До того момента, как точки вызова функций были реализованы в приложении MediaWiki, добавление специфического кода на языке PHP подразумевало модификацию основного кода приложения, что было не так просто и не рекомендовалось делать. Первые точки вызова функций были предложены и реализованы Evan Prodromou в 2004 году; большее количество дополнительных точек вызова функций добавлялось при появлении необходимости в них в течение многих лет. С помощью точек вызова функций возможно добавить даже дополнительные возможности в язык разметки приложения MediaWiki, создав расширения тэгов.
Система расширений не идеальна; регистрация расширений осуществляется в ходе выполнения кода при запуске вместо использования кэшированных данных, что ограничивает возможности реализации абстракций и оптимизаций, а также негативно влияет на производительность приложения MediaWiki. Но, в общем, архитектура расширений в данный момент позволила реализовать относительно гибкую инфраструктуру, которая облегчила задачу по вынесению специализированного кода в модули, сдерживанию (высоких) темпов роста объема кода основных систем и добавлению сторонними пользователями функций в приложение MediaWiki.
Наоборот, очень сложно разработать новую оболочку для приложения MediaWiki без повторного изобретения колеса. В приложении MediaWiki оболочки являются классами языка PHP, каждый из которых расширяет возможности родительского класса Skin
; они содержат функции, которые получают необходимую для генерации документа в формате HTML информацию. Существующая долгое время оболочка "MonoBook" сложно модифицируема из-за того, что она содержит большое количество специфического для браузеров кода таблиц стилей CSS, используемого для поддержки устаревших браузеров; редактирование шаблона или таблиц стилей CSS требовало множества последовательных изменений для поддержки совместимости со всеми браузерами и платформами.
API
Еще одной основной точкой входа для приложения MediaWiki, помимо файла index.php
, является файл api.php
, используемый в качестве API (интерфейса программирования приложений) для осуществления веб-запросов с использованием формата данных для программного доступа.
Пользователи сайта Wikipedia ранее создавали "ботов", которые получали данные путем обработки генерируемых приложением MediaWiki данных в формате HTML; этот метод был очень не надежным и много раз давал сбои. Для исправления ситуации разработчики представили интерфейс только для чтения данных (реализованный в файле query.php
), который впоследствии был усовершенствован до полнофункционального поддерживающего программные операции чтения и записи данных API, предоставляющего прямой высокоуровневый доступ к информации из базы данных приложения MediaWiki. (Объемная документация для API доступна.)
Клиентские программы могут использовать API для входа в систему, получения данных и отправки изменений. API поддерживает как тонкие веб-клиенты на языке JavaScript, так и пользовательские приложения. Практически все действия, которые могут быть выполнены с помощью веб-интерфейса, также в общем случае могут выполнены с использованием API. Клиентские библиотеки, реализующие функции для доступа к API приложения MediaWiki доступны для многих языков программирования, включая языки Python и .NET.
Далее: Планы на будущее