By kris digital on
Hi everybody,
i once wrote a module which creates multiple cck table for showing prices on the page... Now I had to resave lots of nodes and used
$current_node_id = node_load($current_node["nid"]);
$node = node_submit($current_node_id);
node_save($node);
for that. Afterwards all cutom fields were lost... I tracked it down and now my question is, why in the hook_field the variable $node_field is empty, but only if I save it programatically?? Here is my code:
/**
* Implementation of hook_field().
*/
function matrix_field($op, &$node, $field, &$node_field, $teaser, $page) {
switch ($op) {
case 'load':
$result = db_query("SELECT * FROM {node_field_matrix_data} md LEFT JOIN {node_field_matrix_add} ma ON (ma.vid = md.vid AND ma.delta = md.delta) WHERE md.vid = %d AND md.field_name = '%s' ORDER BY md.delta ASC", $node->vid, $field['field_name']);
$values = array();
while ($data = db_fetch_array($result)) {
// dprint_r($data);
$values[$data["delta"]][$data["row"]][$data["col"]] = $data['value'];
$values[$data["delta"]]['title'] = $data['title'];
$values[$data["delta"]]['desc'] = $data['description'];
}
$additions = array($field['field_name'] => $values);
return $additions;
case 'update':
case 'insert':
db_query("DELETE FROM {node_field_matrix_data} WHERE vid = %d AND field_name = '%s'", $node->vid, $field['field_name']);
db_query("DELETE FROM {node_field_matrix_add} WHERE vid = %d", $node->vid);
for ($l=0; $l < $node_field['count']; $l++) {
for ($i=1; $i<= $field['rows']; $i++) {
for ($j=1; $j<= $field['columns']; $j++) {
$suc= db_query("INSERT INTO {node_field_matrix_data} SET nid = %d, vid = %d, field_name = '%s', row = %d, col = %d, value = '%s', delta = %d", $node->nid, $node->vid, $field['field_name'], $i, $j, $node_field[$l][$i][$j], $l);
}
}
$suc = db_query("INSERT INTO {node_field_matrix_add} (vid, delta, title, description) VALUES (%d, %d, '%s', '%s')", $node->vid, $l, $node_field[$l]['title'], $node_field[$l]['desc']);
//var_dump($suc);
}
break;
}
}
Maybe somebody knows...?