Я использую drupal_execute для программного сохранения узла, и по большей части он работает нормально, за исключением случаев, когда речь идет о поле с несколькими значениями.
Что публикуется, это (я просто включаю часть, которая не работает):
[alt] => Array
(
[0] => Array
(
[name] => Sam I. Am
[phone] => (650) 5553131
)
[1] => Array
(
[name] => The Lorax
[phone] => 6505553344
)
[2] => Array
(
[name] =>
[phone] =>
)
)
Когда я устанавливаю $ form_state ['values'], яИспользую:
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']);
}
И чтобы сохранить узел:
drupal_execute('info_node_form', $form_state, $node);
В качестве теста, чтобы убедиться, что я ссылаюсь на соответствующие поля, я отредактировал существующий узел, используяузел / X / отредактируйте и распечатайте $ form_state ['values'] после отправки.Вот что он распечатал:
<code>//output of print '<pre>'; print_r($form_state['values']); print '
';[field_alternativename] => Array ([0] => Array ([value] => Sam I. Am [_error_element] => group_alternative_contacts] [0] [field_alternativename] [value [_weight] => 0 [_remove] => 0) [1] => Массив ([value] => The Lorax [_error_element] => group_alternative_contacts] [1] [field_alternativename] [value [_weight] => 1 [_remove] => 0)) [field_alternativephone] => Массив([0] => Массив ([значение] => (650) 5553131 [_error_element] => group_alternative_contacts] [0] [field_alternativephone] [значение [_weight] => 0 [_remove] => 0) [1] =>Массив ([значение] => (650) 5553344 [_error_element] => group_alternative_contacts] [1] [field_alternativephone] [значение [_weight] => 1 [_remove] => 0))
ИтакЯ не понимаю, почему он не сохраняется ... Я не устанавливаю дельту, но я не думал, что должен?В MySQL данные хранятся как:
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 |
+-------+-------+-------+------------------------------+