Mediawiki - добавить кнопку В главную - 2026
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Published: 2026-09-26
Кнопка «В главную» в MediaWiki — короткий PHP-хук, который добавляет на сайт фиксированную ссылку на главную страницу в правом нижнем углу. Код вставляется один раз в LocalSettings.php и не зависит от скина: подходит для Vector, Citizen, chameleon и Medik. Проверено на MediaWiki **1.35.0, 1.39.1, 1.41.0 и 1.46.0** (поддерживается от 1.27).
Что делает код:
- показывает кнопку только в основном пространстве имён (NS 0) и только не на самой главной странице;
- определяет адрес главной через
SpecialPage::getTitleFor( 'Mainpage' ), а если класс недоступен — через запасную цепочку\MediaWiki\Title\Title→Title; - добавляет CSS в
<head>черезaddInlineStyle(), а саму кнопку — в конец<body>черезaddHTML(); - не перекрывает cookie-баннер (
body:has(.mw-cookiewarning-container)поднимает кнопку доbottom:85px) и скрывается при печати через@media print.
Установка в трёх шагах:
- Скопировать код ниже в конец
LocalSettings.phpсайта. - Проверить синтаксис:
php -l LocalSettings.php. - Очистить кеш: открыть любую статью с
?action=purgeили выполнитьphp maintenance/rebuildall.php --quiet.
$wgHooks['BeforePageDisplay'] = array_merge(
$wgHooks['BeforePageDisplay'],
array( static function ( $out, $skin ) {
$title = $out->getTitle();
if ( !$title || $title->getNamespace() != 0 || $title->isMainPage() ) {
return true;
}
if ( class_exists( 'SpecialPage' ) ) {
$mainUrl = SpecialPage::getTitleFor( 'Mainpage' )->getLocalURL();
} else {
$mainUrl = $wgScriptPath . '/index.php?title=' . urlencode( wfMessage( 'mainpage' )->text() );
}
foreach ( array( '\MediaWiki\Title\Title', 'Title' ) as $cls ) {
if ( class_exists( $cls ) ) {
$t = call_user_func( array( $cls, 'newFromText' ), wfMessage( 'mainpage' )->text() );
if ( $t ) { $mainUrl = $t->getLocalURL(); break; }
}
}
$css = '.mw-btn-home{position:fixed;bottom:20px;right:20px;z-index:9999;'
. 'display:inline-block;padding:8px 16px;border-radius:20px;background:#2a4b8d;'
. 'color:#fff!important;text-decoration:none;font-size:13px;font-weight:bold;'
. 'box-shadow:0 4px 12px rgba(0,0,0,.3);opacity:.9}'
. '.mw-btn-home:hover{background:#1d3768;opacity:1}'
. 'body:has(.mw-cookiewarning-container) .mw-btn-home,'
. 'body:has(.mw-cookiewarning) .mw-btn-home{bottom:85px}'
// правило печати разбито на две строки, чтобы не было лишних скобок подряд
. '@media print{ .mw-btn-home{ display:none }'
. ' }';
$btnHtml = sprintf(
'<a class="mw-btn-home" href="%s" title="Вернуться на главную страницу" rel="nofollow">← В главную</a>',
htmlspecialchars( $mainUrl, ENT_QUOTES )
);
$out->addInlineStyle( $css );
$out->addHTML( $btnHtml );
return true;
} )
);
ℹ️ Информация
Код использует только базовые API ядра (OutputPage::addInlineStyle, OutputPage::addHTML, SpecialPage::getTitleFor), поэтому не требует правки скинов и переносится на любой сайт MediaWiki без адаптации.
