Добавление точки в содержание статей движка MediaWiki

Изменение структуры таблицы с кратким содержанием страницы
Столкнулся с такой проблемой — как заставить MediaWiki в содержание каждой статьи автоматически добавлять точку в нумерации после каждой цифры. Поясняю, сейчас нумерация заголовков у стандартной сборки происходит так:

 1 Текст
 2 Текст
    2.1 Текст
    2.2 Текст

а требуется следующий вид:


 1. Текст
 2. Текст
    2.1. Текст
    2.2. Текст

Решение достаточно элегантное и простое, хотя первый ответ на Support desk был такой: "I can't think of a good way to do this (like you could hack the source, the relavent code is in includes/Linker.php, the method tocLine of Linker class [or at least that's what it is in trunk].)". Обсуждение этого вопроса можно посмотреть тут.

Ближе к делу, находим файл includes/Linker.php и в нём следующую функцию:


    function tocLine( $anchor, $tocline, $tocnumber, $level, $sectionIndex = false ) {
        $classes = "toclevel-$level";
        if ( $sectionIndex !== false )
        $classes .= " tocsection-$sectionIndex";
        return "\n<li class=\"$classes\"><a href=\"#" .
        $anchor . '"><span class="tocnumber">' .
        $tocnumber . '</span> <span class="toctext">' .
        $tocline . '</span></a>';
    }

И добавляем в начало функции такую строчку:

$tocnumber = "$tocnumber. ";

Вот рабочий вариант этой функции:


    function tocLine( $anchor, $tocline, $tocnumber, $level, $sectionIndex = false ) {
        $tocnumber = "$tocnumber. ";
        $classes = "toclevel-$level";
        if ( $sectionIndex !== false )
        $classes .= " tocsection-$sectionIndex";
        return "\n<li class=\"$classes\"><a href=\"#" .
        $anchor . '"><span class="tocnumber">' .
        $tocnumber . '</span> <span class="toctext">' .
        $tocline . '</span></a>';
    }

Возможен также вариант поставить точку перед

<span class="toctext">' .

Но тогда эту точку не сможет убирать Extension:PSINoTocNum, которое скрывает нумерацию, а оно очень пригодилось в написание законов, где нумерации не должно быть.

Изменение структуры нумерации разделов
Отличие данной задачи от выше описанной в том, чтобы оно позволяет добавить точку и в содержание, и после каждого номера раздела. Для этого находим файл /includes/parser/Parser.php. За обработку текста раздела отвечает функция:

function formatHeadings( $text, $origText, $isMain=true )

Там находим:


    # count number of headlines for each level
    @$sublevelCount[$toclevel]++;
    $dot = 0;
    for( $i = 1; $i <= $toclevel; $i++ ) {
        if ( !empty( $sublevelCount[$i] ) ) {
            if ( $dot ) {
                $numbering .= '.';
            }
            $numbering .= $wgContLang->formatNum( $sublevelCount[$i] );
            $dot = 1;
        }
    }

Для решения нашей задачи необходимо добавить после функции

$numbering .= '.';

Таким образом эта часть будет выглядеть так:


    # count number of headlines for each level
    @$sublevelCount[$toclevel]++;
    $dot = 0;
    for( $i = 1; $i <= $toclevel; $i++ ) {
        if ( !empty( $sublevelCount[$i] ) ) {
            if ( $dot ) {
                $numbering .= '.';
            }
            $numbering .= $wgContLang->formatNum( $sublevelCount[$i] );
            $dot = 1;
        }
    }
    $numbering .= '.';

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.