n00b0101
asked on
Drupal question - using drupal_execute for multivalue fields?
I'm using drupal_execute to save a node programmatically, and for the most part, it works fine, except when it comes to a multi-value field.
What gets posted is this (I'm just including the portion that isn't working):
As a test, to make sure that I'm referencing the appropriate fields, I edited an existing node using node/X/edit and printed out the $form_state['values'] upon submission. This is what it printed out:
What gets posted is this (I'm just including the portion that isn't working):
[alt] => Array
(
[0] => Array
(
[name] => Sam I. Am
[phone] => (650) 5553131
)
[1] => Array
(
[name] => The Lorax
[phone] => 6505553344
)
[2] => Array
(
[name] =>
[phone] =>
)
)
When I'm setting the $form_state['values'], I'm using: for($a = 0; $a < count($_REQUEST['alt']); $a++) {
$form_state['values']['field_alternativename'][$a]['value'] = check_plain($_REQUEST['alt'][$a]['name']);
$form_state['values']['field_alternativephone'][$a]['value'] = format_phone($_REQUEST['alt'][$a]['phone']);
}
And to save the node: drupal_execute('info_node_form', $form_state, $node);
As a test, to make sure that I'm referencing the appropriate fields, I edited an existing node using node/X/edit and printed out the $form_state['values'] upon submission. This is what it printed out:
//output of print '<pre>'; print_r($form_state['values']); print '</pre>';
[field_alternativename] => Array
(
[0] => Array
(
[value] => Sam I. Am
[_error_element] => group_alternative_contacts][0][field_alternativename][value
[_weight] => 0
[_remove] => 0
)
[1] => Array
(
[value] => The Lorax
[_error_element] => group_alternative_contacts][1][field_alternativename][value
[_weight] => 1
[_remove] => 0
)
)
[field_alternativephone] => Array
(
[0] => Array
(
[value] => (650) 5553131
[_error_element] => group_alternative_contacts][0][field_alternativephone][value
[_weight] => 0
[_remove] => 0
)
[1] => Array
(
[value] => (650) 5553344
[_error_element] => group_alternative_contacts][1][field_alternativephone][value
[_weight] => 1
[_remove] => 0
)
)
So, I'm not understanding why it isn't being saved... I'm not setting the delta, but I didn't think I'd have to? In mysql, the data is stored as: mysql> select * from content_field_alternativename ;
+-------+-------+-------+-----------------------------+
| vid | nid | delta | field_alternativename_value |
+-------+-------+-------+-----------------------------+
| 22433 | 22433 | 0 | Sam I. Am |
+-------+-------+-------+-----------------------------+
mysql> select * from content_field_alternativephone;
+-------+-------+-------+------------------------------+
| vid | nid | delta | field_alternativephone_value |
+-------+-------+-------+------------------------------+
| 22433 | 22433 | 0 | (650) 5553131 |
+-------+-------+-------+------------------------------+
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER