MediaWiki
Установка MediaWiki
Установка крайне проста: скачиваем последнюю версию с официального сайта http://www.mediawiki.org и распаковываем в нужный каталог сайта (например /var/www/site/w/); далее настраиваем через веб-интерфейс. Точка входа http://domain.ru/w/config/
Подробно об установке можно узнать из официальной инструкции, и ещё одна здесь.
Вики движок лучше не размещать в корне сайта. Почему, кратко объяснено в спец. статье.
После установки хорошо бы ознакомиться с задачами администратора MediaWiki, где сказано что ещё можно доделать.
Как настроить (кратко)
Хорошие краткие инструкции (ЧаВО или FAQ) есть на официальном сайте MediaWiki как на русском языке, так и на английском.
Запрещаем редактирование не авторизованным пользователям:
$wgGroupPermissions['*']['createaccount'] = true;
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['*']['createtalk'] = false;
Делаем ссылки короткими
По умолчанию ссылки выглядят так: http://domain.ru/wiki/index.php?title=article. Чтобы сделать их такими же короткими и наглядными, как в Википедии, есть много способов. Один из них - это добавить в LocalSettings.php:
$wgScriptPath = "/w";
$wgArticlePath = "/wiki/$1";
$wgUsePathInfo = true;
где $wgScriptPath - каталог установки вики-сайта, а $wgArticlePath - виртуальный каталог, который нужно будет указать в URL при обращении к статье, имя не должно совпадать с реальным каталогом.
Затем, в корневом каталоге сайта (т.е. рядом с каталогом "w") нужно создать файл .htaccess:
RewriteEngine On
RewriteRule ^wiki/(.*)$ /w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ /w/index.php [L,QSA]
RewriteRule ^/*$ /w/index.php [L,QSA]
Для лучшего понимания этого кода можно подробней ознакомиться с синтаксисом дерективы RewriteRule.
Если на сервере установлено несклько виртуальных хостов, то нужно ещё добавить настройку виртуального хоста в секцию <VirtualHost>:
RewriteEngine On
RewriteOptions Inherit
и подключить модуль rewrite, после чего перезагрузить сервер. В Debian это делается следующим образом:
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
/etc/init.d/apache2 restart
Добавляем логотип
Картинку не более 135х135 пикселей с прозрачным фоном загружаем в папку images и добавляем в LocalSettings.php:
$wgLogo = “{$wgScriptPath}/images/logofinal.png”;
Меняем favicon
Это изображение появляется возле адреса страницы в адресной строке сайта, а также в закладках. Его размер должен быть либо 16x16 либо 32x32 пикселей. Не все браузеры поддерживают формат favicon отличный от ico, подробней читайте на http://en.wikipedia.org/wiki/Favicon#Browser_support
Чтобы добавить favicon.ico можно
- положить как обычно в корневой каталог сайта, т.е. на одном уровне с каталогом "w/" или
- скопировать изображение в папку images и добавить в LocalSettings.php:
$wgFavicon = "$wgScriptPath/images/favicon.ico";
Настраиваем навигационную панель (слева)
Создаём страницу MediaWiki:Sidebar, где описываем содержание навигационной панели.
Синтаксис:
* <название блока 1>
** <ссылка на статью 1>|<отображаемый текст 1>
** <ссылка на статью 2>|<отображаемый текст 2>
* <название блока 2>
** <ссылка на статью 3>|<отображаемый текст 3>
** <ссылка на статью 4>|<отображаемый текст 4>
Пример:
* navigation
** mainpage|Начальная
** Служебная:AllPages|Все статьи
** Служебная:Categories|Все категории
** portal-url|Сообщество
** helppage|help
* Популярное
** Служебная:PopularPages|Статьи
** Служебная:MostLinkedCategories|Категории
** recentchanges-url|recentchanges
** randompage-url|randompage
* SEARCH
* TOOLBOX
Добавляем слева ссылки на другие вики
В случае многоязыковых проектов достаточно добавить в статью
[[lang:Имя статьи]]
где lang - префикс языка. См. файл languages/Names.php
В случае, если нужно добавить ссылку на любой другой сайт, нужно создать интервики ссылку (см. ниже) и с таким же именем запись в languages/Names.php
Например, в таблице ссылок интервики создали ссылку my-wiki, тогда в Names.php добавляем строчку (в рамках объявления массива):
'my-wiki' => 'My Wiki', # Link to my wiki
Теперь, в статью можно поместить строку:
[[my-wiki:Имя статьи]]
Подробней читать на офф. сайте.
Меняем права пользователей
Права пользователя можно поменять на Special:Userrights. Подробно описано в официальном руководстве.
Меняем пароль пользователя
Пароль любого пользователя можно поменять SQL командой:
UPDATE user SET user_password = MD5(CONCAT(user_id, '-', MD5('Новый_Пароль'))) WHERE user_name = 'Имя_Пользователя';
Разрешаем включать страницы из других вики
Чтобы включить страницу или шаблон из другой вики, она должна быть описана в таблице интервики ссылок и в LocalSettings.php нужно добавить параметр $wgEnableScaryTranscluding:
$wgEnableScaryTranscluding = true;
- ! В версии MediaWiki 16.2 при попытке подключить внешний шаблон {{WikiName:Template:TemplateName}} PHP выдаёт ошибку:
PHP Fatal error: Cannot redeclare class HttpRequest in /local_path_to_site/w/includes/HttpFunctions.php on line 122
Разрешаем загружать файлы
# Позволяем загружать файлы
$wgEnableUploads = true;
# Определяем макс. размер файла
$wgMaxUploadSize = 5000000;
# Отключаем проверку расширения файла
$wgCheckFileExtensions = false;
$wgStrictFileExtensions = false;
Последние два параметра разрешают загружать все файлы (что не безопасно). Если их не указывать, то по умолчанию будут разрешены только изображения.
Чтобы самостоятельно задать тип файлов указываем:
$wgFileExtensions = array('png', 'gif', 'jpg', 'jpeg', 'svg', 'pdf', 'doc', 'docx', 'xls', 'xlsx','ods','odg','odt');
Для того, чтобы файлы могли быть загруженными, должен быть настроен и сам PHP.
Подробней см. официальную документацию.
Добавляем классы таблиц
код для shared.css |
---|
/* -pm- as wikitable but without a table */
/*background and darker header background*/
table.standard {
margin: 1em 1em 1em 0;
border: 1px #aaa solid;
border-collapse: collapse;
}
.standard th, .standard td {
border: 1px #aaa solid;
padding: 0.2em;
}
.standard th {
background: #d2d2d2;
text-align: center;
}
.standard caption {
font-weight: bold;
}
/* -pm- as standart but with frame only */
table.frame {
margin: 1em 1em 1em 0;
border: 1px #aaa solid;
border-collapse: collapse;
}
.frame th .frame td {
padding: 0.2em;
}
.frame th {
background: #d2d2d2;
text-align: center;
}
.frame caption {
font-weight: bold;
}
/* -pm- as standart but wide (100%) */
table.wide {
margin: 1em 1em 1em 0;
border: 1px #aaa solid;
border-collapse: collapse;
width: 100%;
}
.wide th, .wide td {
border: 1px #aaa solid;
padding: 0.2em;
}
.wide th {
background: #d2d2d2;
text-align: center;
}
.wide caption {
font-weight: bold;
}
/* -pm- as wide but with frame only*/
table.wide-frame {
margin: 1em 1em 1em 0;
border: 1px #aaa solid;
border-collapse: collapse;
width: 100%;
}
.wide-frame th .wide-frame td {
padding: 0.2em;
}
.wide-frame th {
background: #d2d2d2;
text-align: center;
}
.wide-frame caption {
font-weight: bold;
}
|
По умолчанию в движке MediaWiki определён только один класс таблиц wikitable.
- Чтобы определить свои классы нужно отредактировать файл skins/common/shared.css. Вставьте в любое место приведённый справа код.
Пример классов таблиц:
вид |
|
|
| ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
код | {| class="wikitable" |- !Заголовок 1||Заголовок 2 |- |Ячейка 1*1||Ячейка 2*1 |- |Ячейка 1*2||Ячейка 2*2 |- |Ячейка 1*3||Ячейка 2*3 |} |
{| class="standard sortable" |- !Заголовок 1||Заголовок 2 |- | 1 Ячейка || 2 Ячейка |- | 2 Ячейка || 1 Ячейка |- | 3 Ячейка || 3 Ячейка |} |
{| class="frame sortable" |- !Латиница||Кириллица||class="unsortable"|Цифры |- | D || Г || 3 |- | E || Щ || 2 |- | F || Б || 11 |} |
широкие |
| ||||||||
---|---|---|---|---|---|---|---|---|---|
|
- Можно добавить возможность сворачивать таблицы. В официальной инструкции рекомендуется создать в вики страницы Common.js и Common.css, но в случае вики семьи такое решение не подойдёт, так действует только на одну вики, поэтому я добавил код в конец следующих файлов в каталоге skins/common/:
- код для Common.js добавил в ajax.js
- код для Common.css добавил в shared.css
Скопируйте и вставте следующий код в MediaWiki:Common.js и MediaWiki:Common.css:
код для Common.js |
---|
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
* Maintainers: [[en:User:R. Koot]]
*/
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';
function collapseTable( tableIndex ) {
var Button = document.getElementById( 'collapseButton' + tableIndex );
var Table = document.getElementById( 'collapsibleTable' + tableIndex );
if ( !Table || !Button ) {
return false;
}
var Rows = Table.rows;
if ( Button.firstChild.data == collapseCaption ) {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = 'none';
}
Button.firstChild.data = expandCaption;
} else {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Button.firstChild.data = collapseCaption;
}
}
function createCollapseButtons() {
var tableIndex = 0;
var NavigationBoxes = new Object();
var Tables = document.getElementsByTagName( 'table' );
for ( var i = 0; i < Tables.length; i++ ) {
if ( hasClass( Tables[i], 'collapsible' ) ) {
/* only add button and increment count if there is a header row to work with */
var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
if ( !HeaderRow ) {
continue;
}
var Header = HeaderRow.getElementsByTagName( 'th' )[0];
if ( !Header ) {
continue;
}
NavigationBoxes[tableIndex] = Tables[i];
Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
var Button = document.createElement( 'span' );
var ButtonLink = document.createElement( 'a' );
var ButtonText = document.createTextNode( collapseCaption );
Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
ButtonLink.setAttribute( 'href', "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode( '[' ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( ']' ) );
Header.insertBefore( Button, Header.childNodes[0] );
tableIndex++;
}
}
for ( var i = 0; i < tableIndex; i++ ) {
if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
collapseTable( i );
} else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
var element = NavigationBoxes[i];
while ( element = element.parentNode ) {
if ( hasClass( element, 'outercollapse' ) ) {
collapseTable( i );
break;
}
}
}
}
}
addOnloadHook( createCollapseButtons );
/** Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
*/
var hasClass = ( function() {
var reCache = {};
return function( element, className ) {
return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
};
})();
|
код для Common.css |
---|
table.collapsed tr.collapsible {
display: none;
}
.collapseButton { /* 'show'/'hide' buttons created dynamically by the */
float: right; /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */
font-weight: normal; /* are styled here so they can be customised. */
text-align: right;
width: auto;
}
|
Добавление расширений
Список всех уже установленных расширений можно увидеть на странице Special:Version а в руссифицированных версиях также Служебная:Version
Все расширения (extensions) устанавливаются в MediaWiki одинаково:
- копируются в свой подкаталог в каталоге extensions. Список расширений можно узнать из официального списка.
- в LocalSettings.php добавляется строка:
require_once( "$IP/extensions/Каталог_Расширения/Главный_Файл_Расширения.php" );
Некоторые полезные расширения
- FCKeditor - визуальный (WYSIWYG) редактор. У этого расширения можно обновить сам редактор. Подключаем:
require_once( "$IP/extensions/FCKeditor/FCKeditor.php" );
- Cite.php - добавляет поддержку тэгов <ref> и <references />, что позволяет использовать в тексте статьи сноски. Подключаем:
require_once( "$IP/extensions/Cite/Cite.php" );
- ParserFunctions - позволяет использовать тэги: #expr: #if: #ifeq: #ifexist: #ifexpr: #switch: #time: #rel2abs: #titleparts: #iferror:. На Википедии можно почитать как использовать функции парсера. Устанавливать лучше из репозитория Subversion (скачать клиент):
cd extensions/
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ParserFunctions
- SyntaxHighlight GeSHi - подсветка синтаксиса программного кода, позволяет использовать тэги <syntaxhighlight> и <source>. Это расширенная версия GeSHi
cd extensions/
svn co svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SyntaxHighlight_GeSHi
Подключаем:
require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
Параметры:
- lang="??": Определяет язык программировария, сказывается на самой подсветке
- line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS": Как нумеровать линии (по умолчанию никак)
- line start="??": Какой номер у первой строки, используется вместе с line
- highlight="??": Какую линию подсветить, не зависит от line start
- enclose="??": В какой контейнер поместить блок. Принимает значения "pre" (по умолчанию), "div", "none".
- strict: Присутствие этого параметра указывает, что нужно использовать режим strict.
- CategoryTree - добавляет более удобную навигацию по категориям. Позволяет использовать тэг <categorytree>
Копируем в каталог расширений и подключаем:
require_once("$IP/extensions/CategoryTree/CategoryTree.php");
- Collection - даёт возможность создавать книги в формате PDF из статей сайта.
! Требует чтобы PHP поддерживал cURL ! Возможно потребуется доуставить.
Копируем в каталог расширений и подключаем:
require_once("$IP/extensions/Collection/Collection.php");
Чтобы дать пользователям возможность сохранять и делиться своими книгами с другими, добавьте в Localsettings.php:
$wgGroupPermissions['user']['collectionsaveasuserpage'] = true;
$wgGroupPermissions['user']['collectionsaveascommunitypage'] = true;
С настройками по умолчанию книги будут генерироваться на сервере разработчика этого расширения.
- CharInsert - быстрое добавление любых символов или шаблонных тегов. Ниже окна редактирования размещается дополнительная панель инструментов.
Резервное копирование
Чтобы узнать, как скачать дампы базы данных со статьями Википедии, см. статью Википедии
Для создания собственного дампа локального сайта, использующего MediaWiki, есть подробная инструкция.
Если кратко, то полная резервная копия - это дамп из СУБД (у меня MySQL) в виде SQL выражений, а частичная в виде xml файла. Особенности последней в том, что она не зависит от структуры базы данных и может быть перенесена, например, на нувую версию MediaWiki с изменнённой структурой БД, но в xml не выгружаются информация о логинаx пользователей, журналы и метаданные изображений.
- Для SQL дампа выполняем:
mysqldump -h $SERVER -u $USER -p$PASSWORD --default-character-set=$CHARSET $DATABASE -c \
| /bin/gzip -9 > ~/backup/wiki-$(date '+%a').sql.gz
- параметры $USER, $PASSWORD и $DATABASE берём из LocalSettings.php
cat ./LocalSettings.php | grep wgDB
- параметр --default-character-set=$CHARSET нужен, если возникли проблемы с кодировкой (подробней см. статью выше)
- параметр -h $SERVER нужен если подключаемся не через сокет, иначе получим ошибку:
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect
- Для XML дампа используем скрипт dumpBackup.php, расположенный в каталоге maintenance:
php maintenance\dumpBackup.php --full > full.xml
Список параметров dumpBackup.php можно получить, вызвав его без параметров, однако, в исходном коде этого скрипта есть ещё несколько недокументированных опций.
Редактировние статей
Об этом можно подробно узнать из Справки по редактированию.
Уменьшение нагрузки
Полезно запретить поисковым роботам индексировать все служебные страницы, а ограничить их только статьями. Для этого редактируем файл robots.txt в корне сайта:
User-agent: *
Disallow: /w/
В случае вики семьи (фермы), в корневой каталог сайта кладём:
User-agent: *
Disallow: /w/
Disallow: /ru/w-
Disallow: /en/w-
а в языковые подкаталоги:
User-agent: *
Disallow: /w/
Disallow: /w-
Подробнее см. на официальном сайте
Дополнительные настройки
- Интервики (interwiki) - это ссылки, оформленные как внутренние ссылки с использованием специального префикса, но ведущие на страницы других проектов. Интервики-ссылки позволяют сделать ссылку на страницы других вики-проектов, например Википедии, Викиучебника, Викиновостей и т.д., или, к примеру, на разделы вашего вики-проекта на разных языках.
- расширение Interwiki позволяет редактировать таблицу интервики ссылок.
- Tagline - можно изменить подпись "Материал из НазваниеВики".
Полезные ссылки
Документация:
- http://meta.wikimedia.org/wiki/Помощь:Содержание
- http://ru.wikibooks.org/wiki/Вики - небольшой Викиучебник
Советы по настройке:
- http://ru.wikia.com/wiki/Настройка_вики
- http://docs.altlinux.org/archive/4.1/school_server/mediawiki/index.html
- http://homo-creativus.info/tag/mediawiki/
Справочники:
- http://www.wikireality.ru/wiki/Настройки_конфигурации_MediaWiki_(по_алфавиту) - описание всех параметров LocalSettings.php на русском языке
Скины:
- Инструкции как сделать свой скин
- на русском языке
- на английском
- полная официальная
- Сайты со скинами
Утилиты:
- http://www.mediawiki.org/wiki/Extension:Word2MediaWikiPlus - Утилита для конвертации файлов MS Word 2007 в формат текста MediaWiki
Описание движка MediaWiki: