Node Export を Features モジュールと共に使用していて、プロファイルのインストール中にコンテンツをインポートしています。すべて正常に動作しますが、インポート中にノードIDを保持したいです。ソースサイトと同じ順序にしたい。
できますか?
ここでさらに詳しく説明すると、質問が明確になり、より良い回答が得られると思います。
ここで役立ついくつかの考え:
ALTER TABLE node AUTO_INCREMENT = XXX;
(XXX =最初の古いNID)ステートメントを使用すると役立つ場合があります。ただし、ノードの非順次NIDリスト(64、65、68など)をエクスポートしない場合、これは機能しません。また、ソースの最初のNID(または一致するNID)より大きいNIDがすでにある場合、ターゲットサイトは失敗または破壊される可能性が高くなります。つまり、いいえ(とにかく簡単/安全に)。
特定のコンテンツIDを探している場合は、ソース/宛先サイトに [〜#〜] uuid [〜#〜] モジュールを配置することを検討してください。私の知る限り、これにより、ノードIDが異なる場合でも、サイト間で一致するノードの一意の識別子を維持できます。
はい、少しの作業で。
まず、node.nidとnode_revision.vidの自動インクリメントを無効にします。読者のための演習の詳細。
次に、1つの関数を含むカスタムモジュールを作成します(mymodule_ns($ node)など)。
node_saveの内容をコピーして、api.drupal.orgから関数に貼り付けます。
次に(drupal 7.28)の現在の値)elseの行を
if($node->is_new)
それは言う
drupal_write_record('node', $node, 'nid);
に
drupal_write_record('node', $node);
次に、elseの下の行を
if($!empty($node->revision))
それは言う
_node_save_revision($node, $user->uid, 'vid');
に
_node_save_revision($node, $user->uid);
モジュールを有効にします。
最後に、次の変更を加えて、通常どおりプログラムでノードを作成します。
Nodeとnode_revisionテーブルで自動インクリメントをオンに戻し、自動インクリメント値をインポートした最高のnidよりも大きい値に設定することを忘れないでください。
ハッピーハンティング。