Загрузка предыдущей ревизии узла - PullRequest
2 голосов
/ 25 июля 2010

Когда вы получаете узел, как вы загружаете предыдущую версию (ревизию)?

Я знаю, как загружать ревизию, но не знаю, как получить номер предыдущей ревизии ($ node-> vid является текущей ревизией).

спасибо

Ответы [ 3 ]

2 голосов
/ 26 июля 2010

Предполагая, что у вас есть объект узла $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 является глобальным для каждого узла; он не содержит одно и то же значение для разных узлов.

2 голосов
/ 26 июля 2010

Спасибо всем.

Я нашел и другое решение:

  $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);
  }

Но если у вас много ревизий, вы получите большой массив.

0 голосов
/ 26 июля 2010

Если я понимаю, что вы пытаетесь сделать;Вы хотите получить предварительный просмотр узла после того, как кто-то отправляет изменения?

Кнопка предварительного просмотра имеет свой собственный обработчик отправки, 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.
}
...