User:Barrylb/Special pages outside Special namespace/ru
Special pages outside Special namespace Release status: unknown |
|
---|---|
Implementation | Special page |
Description | Можно лучше интегрировать служебные страницы со структурой сайта. Вместо адреса служебных страниц (такой как http://www.mysite.com/wiki/Служебная:Events/2006/07/21/Meeting) можно заставить их появляться по такой ссылке как http://www.mysite.com/wiki/Events/2006/07/21/Meeting. |
Author(s) | Barrylb |
MediaWiki | 1.6.7 |
License | No license specified |
Download | No link |
$wgIntegratedSpecialPages |
|
Translate the Barrylb/Special pages outside Special namespace extension if it is available at translatewiki.net |
Если у тебя есть функции на сайте, которые не подходят для Вики страниц часто приходится создавать служебные страницы, но было-бы красивее если-бы у страниц не было "Служебная:" в адресе.
Вот возможность создать служебные страницы с лучшей интеграцией в структуру сайта. Вместо адреса служебных страниц (такой как 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');