当你得到一个节点时,你如何加载以前的版本(修订版)?
我知道如何加载修订版,但不知道如何获取上一个修订版号($node->vid 是当前修订版)。
谢谢
当你得到一个节点时,你如何加载以前的版本(修订版)?
我知道如何加载修订版,但不知道如何获取上一个修订版号($node->vid 是当前修订版)。
谢谢
谢谢大家。
我还找到了另一个解决方案:
$revisions = node_revision_list($node); 下一个($修订); if ($preview_key = key($revisions)) { $preview_revision = $revisions[$preview_key]; $old_node = node_load($node->nid, $preview_revision->vid); }
但是如果你有很多修订,你会得到一个很大的数组。
假设您有一个 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
对于每个节点都是全局的;它不包含不同节点的相同值。
如果我了解您要做什么;您想在有人提交更改后获得节点的预览吗?
预览按钮有自己的提交处理程序,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.
}