MediaWiki/Wiki family (farm)/Способ 2
Читайте также:
- MediaWiki - общая статья об установке и настройке MediaWiki
- MediaWiki/Wiki family (farm) - основная статья о создании фермы вики на движке MediaWiki.
Вводная часть
Этот способ передаёт index.php параметр w, который указывает с какой вики сейчас идёт работа. Создание каталогов и ссылок не требуется в отличае от первого метода.
Этот способ не удалось довести до желаемого результата!
Удалось:
- Объединить три вики в один проект, используя один движок.
- Навигация,авторизация и редактирование по всем вики работает, но только если зарегистрироваться только в одной вики.
- Настроить короткий URL
Проблемы:
- В URL страницы пришлось добавить явно параметр с указанием вики
- testwiki.org/main/Заглавная_страница?w=main
- Если зарегистрироваться сразу в двух вики, то поиск и редактирование ведутся только в одной (т.к. используют одну куки cookie)
Большинство служебных ссылок в статьях не используют этот параметр (он добавлен только в ссылку "переименовать"), поэтому данные беруться из куки.
Вывод:
Если пользователь не будет редактировать в одном браузере сразу несколько вики, то можно использовать этот метод.
Ниже приведён алгоритм по которому проводилась настройка. Любой желающий может его доделать. См. статью по которой делалась настройка.
Настройка
- Добавим в конец LocalSettings.php код (основан на коде с сайта Стива Румберга), который пропишет в браузер пользователя куки с информацией о текущей вики:
# The system determines which wiki to display based on either: # W parameter passed to INDEX.PHP, or # the cookie "wikiCode" # First, test for the W parameter. Was it passed? $sr_WikiCode = $_REQUEST['w']; if ($sr_WikiCode <> "") { # Yes, W parameter was passed, so save it in a cookie until it gets changed. setcookie('wikiCode', $sr_WikiCode, time()+60*60*24*365, '/', '.testwiki.org'); } elseif ($_COOKIE['wikiCode'] <> "") { # the parameter "W" wasn't passed but the cookie wikiCode does have a value, so use it $sr_WikiCode = $_COOKIE['wikiCode']; } else { # neither the W parameter was passed nor does the cookie wikiCode have a value, so # we don't know which wiki to display. Let user know that we cannot continue. die('No valid wiki specified'); } # Set the configuration variables specific to the individual wiki require_once ('LS_' . $sr_WikiCode . '.php');
- В LocalSettings.php сейчас описаны настройки основного сайта (main). Настройки остальных вики будут храниться в файлах вида LS_WikiPrefix.php, где WikiPrefix - префикс для вики в БД. Так вики main, pool и lib должны иметь префиксы "main_", "pool_" и "lib_" соответственно. В этих дополнительных настроечных файлах мы может переопределять любые переменные.
- LS_main.php
<?php # called by: LocalSettings.php # # Nothing to change. This is the main site. #
- LS_pool.php
<?php # called by: LocalSettings.php $wgDBprefix = "pool_"; $wgSitename = "TestWiki common pool";
- LS_lib.php
<?php # called by: LocalSettings.php $wgDBprefix = "lib_"; $wgSitename = "TestWiki library";
- Теперь создаём таблицы для новых двух вики. Чтобы воспользоваться конфигурационным скриптом как и для создания первой вики, временно переименуем файл LocalSettings.php. Параметры соединения к БД указывает теже, что и для первой вики. Не забудем указать префиксы к теблицам (pool_ и lib_). Генерируемые файлы LocalSettings.php для новых вики переносим куда-нибудь. Они нам не пригодятся, но лучше их сохранить до конца настройки проекта в целях отладки, если вдруг возникнут осложнения.
- Возвращаем переименованному ранее LocalSettings.php его исходное имя.
- В браузере проверяем авторизацию и навигацию по вики:
- testwiki.org/test/index.php?w=main
- testwiki.org/test/index.php?w=pool
- testwiki.org/test/index.php?w=lib
Делаем URL коротким
- Во всех конфигурационных файлах Добавляем переменную $wgArticlePath, так, в LocalSettings.php прописываем:
$wgArticlePath = "/main/$1";
- Создаём файл .htaccess в корне проекта, т.е. на том же уровне что и каталог "test", где описываем правила для модуля Apache mod_rewrite:
RewriteEngine On RewriteRule ^main/(.*)$ /test/index.php?title=$1&w=main [PT,L,QSA] RewriteRule ^main/*$ main/ [L,QSA] RewriteRule ^pool/(.*)$ /test/index.php?title=$11&w=pool [PT,L,QSA] RewriteRule ^pool/*$ pool/ [L,QSA] RewriteRule ^lib/(.*)$ /test/index.php?title=$11&w=lib [PT,L,QSA] RewriteRule ^lib/*$ lib/ [L,QSA] RewriteRule ^/*$ /test/index.php [L,QSA]
Для лучшего понимания этого кода можно подробней ознакомиться с синтаксисом дерективы RewriteRule.
- Проверяем навигацию по всем трём вики.
- testwiki.org/main/
- testwiki.org/pool/
- testwiki.org/lib/