Загрузка предыдущей редакции узла
Когда вы получаете узел, как вы загружаете предыдущую версию (ревизию)?
Я знаю, как загрузить ревизию, но не знаю, как получить номер предыдущей ревизии ($node->vid-это текущая ревизия).
Спасибо
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
является глобальным для каждого узла; оно не содержит одного и того же значения для разных узлов.
Спасибо всем.
Я нашел и другое решение:
$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); }Но если у вас много ревизий, вы получаете большой массив.
Если я понимаю, что вы пытаетесь сделать; вы хотите получить предварительный просмотр узла после того, как кто-то отправит изменения?
Кнопка предварительного просмотра имеет свой собственный обработчик отправки,
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. }