User:Barrylb/Special pages outside Special namespace/ru

From mediawiki.org
MediaWiki extensions manual
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');