mediawiki: есть ли способ автоматически создавать страницы перенаправления, которые перенаправляют на текущую страницу? - PullRequest
1 голос
/ 16 марта 2012

Мое хобби - писать вещи на персональном вики-сайте: http://comp -arch.net . В настоящее время использую mediawiki (хотя я часто сожалею о том, что выбрал его, так как мне нужен контроль доступа к странице).

Часто я создаю страницы, которые определяют несколько терминов или понятий на одной странице. Например. http://semipublic.comp -arch.net / вики / Invalidate_before_writing_versus_write_through_is_the_invalidate .

Зачастую такие страницы "A против B" содержат единственные определения A и B. Или, по крайней мере, единственные определения, которые я до сих пор получал при написании.
Иногда я буду определять гораздо больше, чем две темы на одной странице.

Если я создаю такой "A vs B" или другой пейджинг, содержащий несколько определений D1, D2, ... DN, я бы хотел автоматически создать страницы перенаправления, чтобы я мог сказать [[ A]] или [[B]] или [[D1]] .. [[DN]] на других страницах.

На данный момент я знаю, как создать такие страницы вручную. Сложно не отставать.

Кроме того, в то время, когда я создаю такую ​​страницу, я хотел бы предоставить некоторый текст страницы - обычно это категория.


Вот еще один пример: варианты имен страниц. Я часто нахожу, что хочу создать несколько вариантов имени страницы, все ссылки на одно и то же место. Например [[Многопоточного]], [[многопоточность (MT)]], [[MT (многопоточность)]], [[MT]]

Пожалуйста, не говорите мне использовать ссылки по каналу. Это НЕ то, что я хочу!


TWiki имеет плагины, такие как

  • TOPICCREATE автоматически создает темы или прикрепляет файлы во время сохранения темы

Более того, я помню плагин twiki, имя которого я не могу вспомнить или погуглить, который включал в себя текст некоторых подстраниц в вашем текущем opage. Затем вы можете отредактировать все эти страницы вместе и сохранить - и текст будет извлечен и распространен по мере необходимости. (Кстати, если вы можете вспомнить название пакета tghat, пожалуйста, напомните мне. У него были определенные проблемы, в частности, при блокировке файлов (IIRC заблокировал только верхний файл для редактирования, но не используйте подтемы, так что вы можете потерять материал) .))

Но этот последний, в сочетании с параметризованными шаблонами, будет почти всем, что мне нужно.

В: Есть ли в Mediawiki нечто подобное? Я не могу его найти.


Я полагаю, что я могу / мог бы написать своего собственного робота для выполнения таких действий.

1 Ответ

1 голос
/ 18 марта 2012

Это возможно сделать, хотя я не знаю, существуют ли уже такие расширения.Если вы не против немного PHP-кодирования, вы можете написать свой собственный, используя ArticleSave и / или ArticleSaveComplete хуки.

Вот примерХук ArticleSaveComplete, который создаст перенаправления на страницу, сохраняемую из всех заголовков разделов на странице:

$wgHooks['ArticleSaveComplete'][] = 'createRedirectsFromSectionTitles';
function createRedirectsFromSectionTitles( &$page, &$user, $text ) {
    // do nothing for pages outside the main namespace:
    $title = $page->getTitle();
    if ( $title->getNamespace() != 0 ) return true;

    // extract section titles:
    // XXX: this is a very quick and dirty implementation;
    // it would be better to call the parser
    preg_match_all( '/^(=+)\s*(.*?)\s*\1\s*$/m', $text, $matches );

    // create a redirect for each title, unless they exist already:
    // (invalid titles and titles outside ns 0 are also skipped)
    foreach ( $matches[2] as $section ) {
        $nt = Title::newFromText( $section );
        if ( !$nt || $nt->getNamespace() != 0 || $nt->exists() ) continue;

        $redirPage = WikiPage::factory( $nt );
        if ( !$redirPage ) continue;  // can't happen; check anyway

        // initialize some variables that we can reuse:
        if ( !isset( $redirPrefix ) ) {
            $redirPrefix = MagicWord::get( 'redirect' )->getSynonym( 0 );
            $redirPrefix .= '[[' . $title->getPrefixedText() . '#';
        }
        if ( !isset( $reason ) ) {
            $reason = wfMsgForContent( 'editsummary-auto-redir-to-section' );
        }

        // create the page (if we can; errors are ignored):
        $redirText = $redirPrefix . $section . "]]\n";
        $flags = EDIT_NEW | EDIT_MINOR | EDIT_DEFER_UPDATES;
        $redirPage->doEdit( $redirText, $reason, $flags, false, $user );
    }
    return true;
}

Примечание: Большая часть этого кода основана на кусочках pagemove перенаправляет создание кода из Title.php и кода исправления двойного перенаправления , а также документации для WikiPage :: doEdit () . На самом деле я не тестировал этот код, , но я думаю, , по крайней мере, у него есть хоть какой-то достойный шанс работать как есть.Обратите внимание, что вам нужно создать страницу MediaWiki:editsummary-auto-redir-to-section в вашей вики, чтобы установить значимую сводку по редактированию для изменений перенаправления.

...