2

ノードを取得したら、以前のバージョン(リビジョン)をどのようにロードしますか?

リビジョンをロードする方法は知っていますが、以前のリビジョン番号を取得する方法はわかりません($ node-> vidが現在のリビジョンです)。

ありがとう

4

3 に答える 3

3

ノードオブジェクトがあると$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 に答える
3

皆さんありがとう。

私は他の解決策も見つけました:

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

しかし、多くのリビジョンがある場合は、大きな配列が得られます。

于 2010-07-26T11:06:29.250 に答える
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 に答える