我正在研究一个模块,该模块通过ajax直接更新CCK分类集的数据。
除了保存到数据库之外,一切正常。使用以下代码:
$data = array(
'vid' => $nid,
'nid' => $nid,
'field_grouping_value' => $tid
);
drupal_write_record('content_field_grouping', $data);
我收到错误消息抱怨我正在公布'delta'字段的值。我的问题是代码正在尝试编写我的新数据,但delta字段是一个不会自动增加的联合键。
通常情况下,我只会增加delta字段,但Drupal会动态处理它,我担心我会弊大于利:
http://i.stack.imgur.com/yTwoN.gif“>
如果nid 3在上面的图像中有另一个字段,它的delta字段将具有值2.然后删除nid为3且delta为0的字段。而不是留下delta字段值1和2,一切都重置为0和1
这样我就不会损坏我的网站,我想知道是否有人可以建议我如何解决这个问题并让Drupal动态处理delta字段......或者是不必要的????
答案 0 :(得分: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);