2010-07-25 60 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); 
    } 

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