2016-04-11 12 views
1

Ich muss alle Seiten mit einem bestimmten Muster in MediaWiki umbenennen. Für jede Seite, die XXXXX enthält, muss sie in YYYYY umbenannt werden. Dies umfasst sowohl Seiteninhalt als auch Seitennamen. Zum Beispiel sollte die Wiki-URL http://wiki.example.org/TfrmXXX_Rates in http://wiki.example.org/TfrmYYY_Rates umbenannt werden, und jeder Text, der XXXXX enthält, sollte durch YYYYY ersetzt werden.MediaWiki Mass Page Umbenennen

Die Replace Text extension kann hierfür nicht verwendet werden, da sie nur den Seiteninhalt ändern kann. Ich muss auch die Seiten und alle Verweise auf sie (einschließlich Interwiki-Links) umbenennen.

Was ich versucht habe, ist dies: dump die MySQL - Datenbank, ersetzen alle Vorkommen von XXXX bis YYYY, dann löschen und erstellen Sie die Wiki - Datenbank mit dem modifizierten SQL - Skript, und führen Sie schließlich die Wartung/rebuildall.php Skript (von MediaWiki).

Das Problem ist, dass es nicht funktioniert. Wenn ich nach einem Schlüsselwort suche, zeigt MediaWiki einige Treffer mit dem zugehörigen Seiteninhalt an. Aber wenn ich die URL öffne, wird "noch kein Inhalt" angezeigt. Ich vermute, dass der Grund dafür ist, dass einige der Daten in serialisierter PHP-Form gespeichert sind, und das kann nicht einfach durch eine Textsuche ersetzt werden.

Die Frage ist also: Wie benenne ich alle Referenzen in einer MediaWiki-Datenbank, einschließlich der Inhalte und Seitennamen?

Antwort

-1

Ich könnte die Aufgabe abschließen. Hier sind die Schritte:

  • Sichern Sie Ihre Datenbank
  • dies Führen Sie alle Seitennamen zu exportieren:

wählen page_title in outfile '/tmp/pagenames.txt' ab Seite;

  • Ich habe ein Programm verwendet, um alle Vorkommen zu ersetzen, ersetzt werden muss und eine andere Textdatei mit dem Format konstruieren

oldXXXname | newXXXname

miken Lösung ist gleich gut, Sie, wenn müssen nur ein einziges Wort ersetzen. Wenn Sie XXX_1 XXX_2 XXX und andere Wörter, die Präfixe von einander sind, ersetzen müssen, müssen Sie ein Programm dafür schreiben und sorgfältig die Reihenfolge der Ersetzungen auswählen, damit sie nicht miteinander kollidieren.

  • Dann laufen

    php mediawiki/Wartung/moveBatch.php --noredirects /tmp/constructed.txt

  • Dann diese Art von SQL verwenden, um alle anderen Textverweise zu ersetzen:

    Verwendung wiki_db; beginnen; Update Text gesetzt Alter_Text = ersetzen (replace (.... ersetzen ( convert (Alter_Text utf8 mit ), 'XXX_1', 'YYYY' ), 'XXX_2', 'YYYY' ), 'XXX_3' 'JJJJ' ... ), 'XXXX_2', 'YYYY_or_whatever' );

  • Schließlich laufen

    php mediawiki/Wartung/rebuildall.php

Ich habe nicht nur miken Antwort akzeptieren, weil es nur die Hälfte der Lösung war.

+0

) Bitte erklären Sie mir, warum es abgelehnt wurde? Ich würde gerne wissen, was mit dieser Lösung falsch ist (die zur Lösung der Aufgabe verwendet wurde). – nagylzs

2

Mediawiki wird mit einer maintenance script ausgeliefert, um das Umbenennen von Seiten und Links zu ihnen vorzunehmen. Sie können diese Abfrage von MySQL laufen eine Datei /tmp/names.txt genannt zu füllen:

SELECT CONCAT(page_title, '|', REPLACE(page_title, 'XXXXX', 'YYYYY')) INTO OUTFILE '/tmp/names.txt' FROM page WHERE page_title LIKE '%XXXXX%'; 

Dies wird Ihnen diese Datei:

TfrmXXX_Rates|TfrmYYY_Rates 
TfrmXXX_Other|TformYYY_Other 
... 

Dann sollten Sie in der Lage sein, diesen Befehl auszuführen:

php /path/to/mediawiki/maintenance/moveBatch.php --noredirects /tmp/names.txt 

Die sollte für alle anderen Verweise im Text funktionieren, die keine Links sind.

+0

Nun, es scheint vollständige Seitennamen zu erwarten. Ich muss stattdessen Muster in Seitennamen ersetzen ... – nagylzs

+0

Kannst du nicht einfach eine Liste von Seitennamen aus der Datenbank herausziehen und sie in eine Textdatei einfügen? – miken32

+0

Das ist eine gute Idee. Ich werde es mir ansehen. – nagylzs