web-dev-qa-db-ja.com

すべてのコンテンツを削除してすべてを再インポートせずに、インポートを通じて既存のノードフィールドを更新するにはどうすればよいですか?

私たちは、私たちのクライアントが上訴や訴訟の事件を追跡するためのアプリケーションを構築しました。現在、システムには2,000を超えるエントリがあります。アプリを作成した後、割り当て金額のフィールドをさらに4つ追加するように要求されました。フィールドを追加しましたが、彼は今コンテンツをインポートしたいと考えています(彼はすでにインポートに適切な順序でcsv形式で入力しています)。

最初にNodeインポートモジュールを使用してすべてのコンテンツをインポートしました(2000エントリのうち1700が最初のインポートで入力されたと思います)。ただし、フィールドを追加したので、Node importには空のフィールドにインポートする機能がありません。主に、一意の識別子を識別して、そのエントリが既に存在することを確認できないためですNode題名。

Node Import Updateモジュールは、モジュールの説明で読んだものから実行できるはずです。ただし、このモジュールをインストールして再度インポートすると、機能せず、代わりに重複したエントリが作成されます。

Node Import Updateモジュールの既知の問題のページ(http://drupal.org/node/813978))では、インポートしたいノードタイプにアクセスして更新する必要があると書かれています。ここで求めている値がわかりません。フィールドが含まれているコンテンツタイプの名前はこれです。これは、現在設定されているものです。タイトルは正しいことがわかりますが、ノードタイプが不明です。

カスタムデータの設定*これらは管理者で定義する必要があります/ * */// Node title as unique identifier // $ IMPORT_UNIQUE_ID_NAME = 'title'; //一意の識別子を保持するインポートフィールド//$ IMPORT_UNIQUE_ID_IS_CCK = FALSE; //識別子はCCKフィールドですか?

// CCK field as unique identifier
$IMPORT_UNIQUE_ID_NAME   = 'title';  // Import field that holds the unique identifier
$IMPORT_UNIQUE_ID_IS_CCK = FALSE;    // Is the identifier a CCK field?

$IMPORT_NTYPE            = 'node';   // Node type to be imported
$IMPORT_UPDATE_DATETIME  = TRUE;        // Settting: update date/time value?

それが長い場合は申し訳ありません-しかし、私は本当にこれを私のクライアントのためにまとめる必要があるので、問題を完全に説明するようにしたかったのです。ありがとう!!!

1
Remy

何千ものサイトで毎日これを行う優れた Feeds モジュールに満足していただけると思います。より高度でカスタマイズ可能な手法は Migrate モジュールで使用できます。これは常にコードが必要ですが、非常に柔軟性があります。どちらも既存のノードを更新できます。それらを最初のインポートに使用した場合は、これで完了です。既存のノードに一意の識別子があれば、引き続き使用できると思います。

2
rfay

一意のIDに基づいてノードエントリに対してSQL UPDATEを実行するカスタムコードをいくつか提案します。あなたのケースは、一般的なコミュニティが寄稿したモジュールには具体的すぎると思います。これは、どこを突くべきかわかっていれば、大きなタスクではありません。これが機能する場合は、ソリューションを投稿してください。

0
DeeZone