2010-07-25 59 views
2

當你得到一個節點時,你如何加載以前的版本(修訂版)?加載節點的前一版本

我知道如何加載修訂版,但不知道如何獲取以前的修訂版號($ node-> vid是當前修訂版)。

謝謝

+0

您是否指節點的前一個版本(作爲下一個版本)? – kiamlaluno 2010-07-25 23:54:10

回答

2

假設你有一個節點對象$node,您可以使用下面的代碼來獲得以前的版本。

$previous_vid = db_result( 
    db_query('SELECT MAX(vid) AS vid FROM {node_revisions} WHERE vid < %d AND nid = %d', $node->vid, $node->nid) 
); 

一旦你有以前的版本,你可以用node_load(array('nid' => $node-nid, 'vid' => $previous_vid))加載新的節點對象。

代碼應檢查db_result()是否返回FALSE,如果沒有以前的修訂版本。 要注意,字段vid對於每個節點都是全局的;它不包含不同節點的相同值。

+0

我給出的答覆是有效的,如果你的意思是「以前的版本(修訂版)」。你寫了「預覽版(修訂版)」。 – kiamlaluno 2010-07-25 23:53:26

+0

謝謝。我在文中改變以備將來參考。 – gagarine 2010-07-26 11:09:56

+0

以上是針對Drupal 6的。這是一個Drupal 7版本:$ previous_vid = db_query(「SELECT MAX(vid)AS vid FROM {node_revision} WHERE vid <:vid AND nid =:nid」,array(':vid'= > $ node-> vid,':nid'=> $ node-> nid)) - > fetchField();如果(isset($ previous_vid)){prev = node_load($ node-> nid,$ previous_vid); } – 2015-05-19 22:46:09

0

如果我明白你想要做什麼;你想在某人提交更改後獲得節點的預覽?

預覽按鈕有其自己的提交處理程序node_form_build_preview()。在那裏,它使用$form_state中的數據創建一個新的節點對象,並運行node_preview(),它返回預覽的標記。

如果希望當用戶點擊預覽按鈕,以捕獲預覽,您需要使用hook_form_alter添加另一個提交處理程序的預覽按鈕:

$['form']['buttons']['preview']['#submit'][] = 'mymodule_custom_preview'; 

其中mymodule_custom_preview的名稱是你的自定義提交功能。看看node_form_build_preview()指導,但你的提交功能,將會是這個樣子:

function mymodule_custom_preview($form, &$form_state) { 
    $node = node_form_submit_build_node($form, $form_state); 
    $preview = node_preview($node); 
} 

而且看看node_form(),它給你的節點形式是如何構成的一個想法。當您完成所有操作後,你將有你的代碼模塊中,看起來是這樣的:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if (strstr($form_id, '_node_form') !== FALSE) { 
    $['form']['buttons']['preview']['#submit'][] = 'mymodule_custom_preview'; 
    } 
} 

function mymodule_custom_preview($form, &$form_state) { 
    $node = node_form_submit_build_node($form, $form_state); 
    $preview = node_preview($node); 

    // Do what you will with $preview. 
} 
+0

不,我的意思是以前的修訂節點。抱歉。但是,謝謝我學到別的東西:) – gagarine 2010-07-26 11:07:35

2

謝謝大家。

我還發現了一個其他的解決辦法:

 
    $revisions = node_revision_list($node); 
    next($revisions); 
    if ($preview_key = key($revisions)) { 
    $preview_revision = $revisions[$preview_key]; 
    $old_node = node_load($node->nid, $preview_revision->vid); 
    } 

但是,如果你有很多的版本,你得到一個大陣。