2016-04-11 4 views
1

Мне нужно переименовать все страницы, соответствующие определенному шаблону в MediaWiki. Для любой страницы, содержащей XXXXX, ее нужно переименовать в ГГГГ. Это включает в себя содержимое страницы, а также названия страниц. Например, URL-адрес wiki http://wiki.example.org/TfrmXXX_Rates должен быть переименован в http://wiki.example.org/TfrmYYY_Rates, а любой текст, содержащий XXXXX, должен быть заменен на YYYYY.MediaWiki массовое переименование страницы

Replace Text extension не может быть использован для этого, поскольку он может изменять только содержимое страницы. Мне также нужно переименовать страницы и все ссылки на них (включая ссылки interwiki).

То, что я пробовал, заключается в следующем: удалите базу данных MySQL, замените все вхождения от XXXX на YYYY, затем запустите и заново создайте базу данных вики с модифицированным сценарием SQL и, наконец, запустите сценарий maintenance/rebuildall.php (предоставленный Обсуждение MediaWiki).

Проблема в том, что она не работает. Когда я ищу ключевое слово, MediaWiki показывает некоторые хиты со связанным содержимым страницы. Но когда я открываю URL-адрес, он покажет «пока нет контента». Я подозреваю, что причина этого в том, что некоторые данные хранятся в сериализованной форме PHP и не могут быть легко заменены текстовым поиском/заменой.

Итак, вопрос в том, как мне переименовать все ссылки в базе данных MediaWiki, включая контент и названия страниц?

ответ

-1

Я мог бы завершить задачу. Вот шаги:

  • резервную копию базы данных
  • Выполнить это экспортировать все имена страниц:

выберите page_title в выходной файл '/tmp/pagenames.txt' со страницы;

  • Я использовал программу для замены всех вхождений, которые должны быть заменены, и построить еще один текстовый файл с форматом

oldXXXname | newXXXname решение

miken является столь же хорошо, если вы необходимо заменить только одно слово. Если вам нужно заменить XXX_1 XXX_2 XXX и другие слова, которые являются префиксами друг друга, тогда вам нужно написать программу для этого и тщательно выбрать порядок замены, чтобы они не конфликтуют друг с другом.

  • Затем запустите

    PHP Mediawiki/обслуживание/moveBatch.php --noredirects /tmp/constructed.txt

  • Затем использовать этот вид SQL, чтобы заменить все другие текстовые ссылки:

    использование wiki_db; начало; текст обновление устанавливается OLD_TEXT = заменить (заменить (.... заменить ( новообращенный (OLD_TEXT используя utf8 ), 'XXX_1', 'YYYY' ), 'XXX_2', 'YYYY' ), 'XXX_3', 'YYYY' ... ), 'XXXX_2', 'YYYY_or_whatever' );

  • Наконец, запустите

    PHP MediaWiki/обслуживание/rebuildall.php

Я не принимаю ответ miken только потому, что была только половина решения.

+0

Кто-нибудь, пожалуйста, объясните, почему он был заблокирован? Я хотел бы знать, что не так с этим решением (которое было активно использовано для решения задачи). – nagylzs

2

Mediawiki поставляется с maintenance script, чтобы выполнить переименование страниц и любые ссылки на них. Вы можете запустить этот запрос из MySQL, чтобы заполнить файл с именем /tmp/names.txt:

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

Это даст вам этот файл:

TfrmXXX_Rates|TfrmYYY_Rates 
TfrmXXX_Other|TformYYY_Other 
... 

Тогда вы должны быть в состоянии выполнить эту команду:

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

Replace Text extension должен работать для любых других ссылок в тексте, которые не являются ссылками.

+0

Ну, похоже, ожидают полных имен страниц. Мне нужно заменить шаблоны в именах страниц, а не ... – nagylzs

+0

Не можете ли вы просто вывести список имен страниц из базы данных и вставить их в текстовый файл? – miken32

+0

Это хорошая идея. Я посмотрю. – nagylzs

Смежные вопросы