2011-03-08 37 views
1

我想從getOldText傳遞$ old到全局編輯器reEdit,但它不工作。我無法從reEdit中調用getOldText,因爲在發生這種情況時,舊文本將被編輯覆蓋。問題在全局函數之間傳遞兩個函數之間的字符串

$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代碼的人,我只是試圖從編輯之前獲取文本。

+1

你可以確認getOldText()在reEdit()之前被調用嗎? – 2011-03-08 16:37:06

+0

嘗試在'$ old'上設置一些默認值。可能MediaWiki以不同於你預期的順序調用函數,所以$ old永遠不會被設置 - 或者其他一些代碼使用'$ old'並且將它重置爲null。全球的樂趣... – 2011-03-08 16:39:29

+0

是的。這是通過Mediawiki的代碼 - $ wgHooks ['EditFormInitialText']將始終在$ wgHooks ['ArticleSaveComplete'] – DharmaTurtle 2011-03-08 16:39:30

回答

0

您的全局變量不會保留該值的原因是因爲您的兩個函數都不是在同一個HTTP請求中運行。在生成編輯表單時調用EditFormInitialText,在某些情況下可能實際上不會運行。 ArticleSaveComplete在稍後提交時調用,此時文章的新版本實際上已完成保存。

你或許可以用ArticleSave而不是EditFormInitialText來做你想做的事情。

+0

非常感謝你!這正是我需要解決的問題。作爲一個側面的問題,你是否建議我使用EGL建議的$ _GET,因爲Global需要避免? – DharmaTurtle 2011-03-08 17:21:21

+0

我不會以這種方式濫用$ _GET,如果你這樣做,它不會幫助你解決問題(我不知道你是否認爲它會這樣,但是無論如何,也這樣覺得)。 – Anomie 2011-03-08 17:31:51

0

最初設置的$ old變量在哪裏?我認爲這個問題可能是範圍界定的,而且你不應該在功能之外的最初$年代之前擁有'全局'這個詞。沒有看到更多的代碼,就沒有辦法確定。

+0

我已經編輯了$ old以具有默認值,這是在我的函數中返回的。看來Get函數不會更新$ old。 – DharmaTurtle 2011-03-08 16:48:01

0

我知道這不是標準方式,但我們仍然可以嘗試使用$ _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

一個絕妙的建議!但結果是我的MediaWiki代碼存在問題。謝謝你嘗試! – DharmaTurtle 2011-03-08 17:34:20