0

私は、ajaxを介して設定されたCCKタクソノミーチェックボックスのデータを直接更新するモジュールに取り組んでいます。

データベースへの保存を除いて、すべてが機能しています。次のコードを使用します。

$data = array(
    'vid' => $nid,
    'nid' => $nid,
    'field_grouping_value' => $tid
);
drupal_write_record('content_field_grouping', $data);

'delta'フィールドの値を重複させているというエラーメッセージが表示されます。私の問題は、コードが新しいデータを書き込もうとしていることですが、デルタフィールドは自動インクリームではないジョイントキーです。

通常、私はデルタフィールドをインクリメントするだけですが、Drupalはそれを動的に処理するので、良いよりも害を及ぼすのではないかと心配しています。 デルタフィールドのあるデータベーステーブルのスクリーンショット

http://i.stack.imgur.com/yTwoN.gif">

上の画像でnid3に別のフィールドがある場合、そのデルタフィールドの値は2になります。次に、nidが3でデルタが0のフィールドを削除します。値1と2のデルタフィールドを残す代わりに、すべて0と1にリセットされます

私が自分のサイトに損害を与えないように、この問題を解決してDrupalにデルタフィールドを動的に処理させる方法を誰かがアドバイスできるかどうか疑問に思います.....またはそれは不要ですか????

4

1 に答える 1

1

次に利用可能なデルタを使用するだけで完全に安全になります。CCKは、そのフィールドを持つノードが編集および保存されるたびにこれらを再実行します(これが、フィールドを削除したときに調整が表示される理由です)。このようなものが機能するはずです:

$next_delta = db_result(db_query('SELECT MAX(delta) + 1 AS del FROM {content_field_grouping} WHERE vid = %d AND nid = %d', $nid, $nid));

$data = array(
  'vid' => $nid,
  'nid' => $nid,
  'field_grouping_value' => $tid,
  'delta' => $next_delta
);
drupal_write_record('content_field_grouping', $data);
于 2012-01-17T17:03:15.957 に答える