ノードを取得したら、以前のバージョン(リビジョン)をどのようにロードしますか?
リビジョンをロードする方法は知っていますが、以前のリビジョン番号を取得する方法はわかりません($ node-> vidが現在のリビジョンです)。
ありがとう
ノードを取得したら、以前のバージョン(リビジョン)をどのようにロードしますか?
リビジョンをロードする方法は知っていますが、以前のリビジョン番号を取得する方法はわかりません($ node-> vidが現在のリビジョンです)。
ありがとう
ノードオブジェクトがあると$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.
}