Проблема передачи строки между двумя функциями с глобальными переменными - PullRequest
1 голос
/ 08 марта 2011

Я пытаюсь передать $ old из getOldText для повторного редактирования с глобальными переменными, но это не работает.Я не могу вызвать getOldText изнутри reEdit, потому что к тому времени, когда происходит, старый текст будет перезаписан редактированием.

$old = "INITIAL";
function reEdit() {
    global $old;
            //removed code creating article object to simplify
    $new = $article->getRawText();
    $article->doEdit( "$new <-new    old -> $old");  //PROBLEM HERE, returns as INITIAL
    return true;
}

function getOldText() {
    global $old;
            //removed code creating article object to simplify
    $old = $article->getRawText();
    return true;
}

$wgHooks['EditFormInitialText'][] = array('getOldText');
$wgHooks['ArticleSaveComplete'][] = array('reEdit');

Проблема в указанной строке - $ old не передается внесмотря на то, что он глобален.

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

Ответы [ 3 ]

0 голосов
/ 08 марта 2011

Я знаю, что это не стандартный способ, но мы все равно можем попробовать использовать $ _GET для хранения старых данных.Таким образом, мы можем устранить все проблемы с областями видимости, специфичные для файлов / классов.


$_GET['old'] = 'INITIAL';
function reEdit() {
            //removed code creating article object to simplify
    $new = $article->getRawText();
    $article->doEdit( "$new ".$_GET['old']);  //PROBLEM HERE, returns as INITIAL
    return true;
}

function getOldText() {
            //removed code creating article object to simplify
    $_GET['old'] = $article->getRawText();
    return true;
}

$wgHooks['EditFormInitialText'][] = array('getOldText');
$wgHooks['ArticleSaveComplete'][] = array('reEdit');

Попробуйте выше и убедитесь, что это работает, если работает, то это проблема с областью видимости, которую мы должны проверить.В противном случае вам необходимо повторно просмотреть документы MediaWiki.

Кстати, первая строка в вашем коде не требуется.

0 голосов
/ 08 марта 2011

Причина, по которой ваша глобальная переменная не сохраняет значение, заключается в том, что обе ваши функции не выполняются в одном и том же HTTP-запросе.EditFormInitialText вызывается, когда создается форма редактирования, и в некоторых случаях может вообще не запускаться.ArticleSaveComplete вызывается при более позднем представлении, когда новая версия статьи фактически заканчивается сохранением.

Возможно, вы сможете делать то, что хотите, с помощью хука ArticleSave вместо EditFormInitialText.

0 голосов
/ 08 марта 2011

Где переменная $ old устанавливается изначально? Я думаю, что проблема может быть в том, что у вас не должно быть слова «global» перед начальным $ old вне функций. Не видя больше кода, невозможно быть уверенным.

...