Drupal вопрос - используя drupal_execute для многозначных полей? - PullRequest
0 голосов
/ 23 февраля 2011

Я использую 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                |
+-------+-------+-------+------------------------------+

1 Ответ

0 голосов
/ 23 февраля 2011

Дельта - это то, как cck хранит несколько значений.nid x, vid x, delta 0 является первым в многозначном поле nid x, vid x, delta 1 является вторым и т. д. Это необходимо, поэтому, если вы добавляете дельты к своим многозначным значениям, это должно работать.

...