User:Barrylb/Special pages outside Special namespace/ru

Если у тебя есть функции на сайте, которые не подходят для Вики страниц часто приходится создавать служебные страницы, но было-бы красивее если-бы у страниц не было "Служебная:" в адресе.

Вот возможность создать служебные страницы с лучшей интеграцией в структуру сайта. Вместо адреса служебных страниц (такой как http://www.mysite.com/wiki/Служебная:Events/2006/07/21/Meeting) можно заставить их появляться по такой ссылке как http://www.mysite.com/wiki/Events/2006/07/21/Meeting.

Должно работать на МедияВики 1.6.7 и 1.7.1. Надо сделать слудующее:


 * Изменить includes/Wiki.php. Вставить перед initializeSpecialCases функцией:

function checkCustomSpecialpages(&$title, &$output) { global $wgTitle, $wgIntegratedSpecialPages;

foreach ($wgIntegratedSpecialPages as $name => $specialname) { if ((strpos($title->getText, $name.'/') === 0) || ($title->getText == $name)) { if ($title->getText == $name) { $par = NULL; $name = $title->getDBkey; }		else { $bits = split( "/", $title->getDBkey, 2 ); $name = $bits[0]; if( !isset( $bits[1] ) ) { $par = NULL; } else { $par = $bits[1]; }		}

$page = SpecialPage::getPage( $name ); if (!is_null( $page ) ) { $wgTitle = Title::makeTitle( NS_SPECIAL, $name ); if (!is_null( $wgTitle )) { if (!$wgTitle->userCanRead) { $output->loginToUse; $output->output; exit; }				else { $page->execute( $par ); return true; }			}		}

} }  return false; }


 * В initializeSpecialCases функции изменить вот это:

else { /* No match to special cases */ вот на это:

else if (!$this->checkCustomSpecialPages($title, $output)) { /* No match to special cases */


 * Потом в LocalSettings.php указать какие служебные страницы надо переместить по какому адресу; обычно имена совпадают, например:

$wgIntegratedSpecialPages = array ('Events' => 'Events', 'Reports' => 'Reports');