2011-02-23 45 views
0

我正在使用drupal_execute以编程方式保存节点,并且大多数情况下,它工作正常,除非涉及到多值字段。Drupal的问题 - 使用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 [“值”],我使用:

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); 

作为测试,以确保我引用相应的领域,我编辑一个使用node/X/edit的现有节点,并在提交时打印出$ form_state ['values']。这是它打印出来:

//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 
       ) 

     ) 

所以,我不理解为什么没有被保存它...我没有设定增量,但我没想到我会得?在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    | 
+-------+-------+-------+------------------------------+ 

回答

0

delta是cck如何存储多个值。 nid x,vid x,delta 0是多值字段nid x,vid x中的第一个,delta 1是第二个等等。如果您将增量值添加到您的多值应该工作,它是必需的。