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.

Установка в трёх шагах:

  1. Скопировать код ниже в конец LocalSettings.php сайта.
  2. Проверить синтаксис: php -l LocalSettings.php.
  3. Очистить кеш: открыть любую статью с ?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">&#8592; В главную</a>',
            htmlspecialchars( $mainUrl, ENT_QUOTES )
        );

        $out->addInlineStyle( $css );
        $out->addHTML( $btnHtml );
        return true;
    } )
);

ℹ️ Информация
Код использует только базовые API ядра (OutputPage::addInlineStyle, OutputPage::addHTML, SpecialPage::getTitleFor), поэтому не требует правки скинов и переносится на любой сайт MediaWiki без адаптации.

Источники

×
Реклама
← В главную
ИКС 88x31 - Visitor counter