2

当你得到一个节点时,你如何加载以前的版本(修订版)?

我知道如何加载修订版,但不知道如何获取上一个修订版号($node->vid 是当前修订版)。

谢谢

4

3 回答 3

3

谢谢大家。

我还找到了另一个解决方案:

  $revisions = node_revision_list($node);
  下一个($修订);
  if ($preview_key = key($revisions)) {
    $preview_revision = $revisions[$preview_key];
    $old_node = node_load($node->nid, $preview_revision->vid);
  }

但是如果你有很多修订,你会得到一个很大的数组。

于 2010-07-26T11:06:29.250 回答
3

假设您有一个 node 对象$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对于每个节点都是全局的;它不包含不同节点的相同值。

于 2010-07-25T23:39:05.087 回答
1

如果我了解您要做什么;您想在有人提交更改后获得节点的预览吗?

预览按钮有自己的提交处理程序,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.
}
于 2010-07-25T21:40:23.047 回答