Drupal 6: только вставка первого символа значения в MySQL - PullRequest
1 голос
/ 10 января 2010

Я работаю с hook_form_alter для типа CCK (для вас, друзья). У меня есть поле, которое обычно является списком выбора в форме моего узла. Однако в этом случае я хочу скрыть список выбора и заполнить его значение в форме запросом SQL.

Все шло хорошо. Я мог видеть, что мое желаемое значение показывалось в источнике HTML, поэтому я знал, что мой запрос выполняется правильно. Однако когда я отправляю форму, она вставляет только первый символ значения. Некоторые из моих тестов были значения 566, 784, 1004 - значения столбца были 5,7,1, соответственно.

Сначала я подумал, что это должны быть атрибуты столбца БД, но когда я удалил свой form_alter, который скрывает поле и вручную выбрал значение, вставляется правильное значение?

   <?php
function addSR_form_service_request_node_form_alter(&$form, $form_state) {
       if (arg(0) == 'user' && is_numeric(arg(1))) {
        $account = arg(1);
        $club = 2589;
        $form['field_sr_account'] = array( '#type' => 'hidden',
        '#value' => $club
        );

           }
}


?>

Кто-нибудь может понять, почему будет вставлен только первый символ ??

Примечание. Я попытался удалить и воссоздать столбец, используя #value & #default_value, и он по-прежнему передает только первый символ целого числа. Кроме того, я исключил обработчик отправки в качестве возможной причины, удалив его, в результате чего был отправлен только один символ

Больше обновлений - поиск продолжается! Хорошо, несколько хороших вопросов. Позвольте мне ответить на них:

  1. Тип столбца БД целое число (4)
  2. HTML-код, который создает хук:

    input type = "hidden" name = "field_sr_account" id = "edit-field-sr-account" value = "2589"

Последнее обновление: я думаю, что проблема была сужена до структуры массива. Когда я делаю var_dump для этого поля после обработки изменения формы, это то, что я получаю ..

[43] => Array
        (
            [#type] => hidden
            [#default_value] => 2589
            [#post] => Array
                (
                )

            [#programmed] =>
            [#tree] =>
            [#parents] => Array
                (
                    [0] => field_sr_account
                )

            [#array_parents] => Array
                (
                    [0] => field_sr_account
                )

            [#weight] => 0.016
            [#processed] => 1
            [#description] =>
            [#attributes] => Array
                (
                )

            [#required] =>
            [#input] => 1
            [#process] => Array
                (
                    [0] => form_expand_ahah
                )

            [#name] => field_sr_account
            [#id] => edit-field-sr-account
            [#value] => 2589
            [#defaults_loaded] => 1
            [#sorted] => 1
        )

Какова структура поля, в которое я могу установить значение формы. Должно быть что-то вроде того, что предлагает Абхага ..

Ответы [ 4 ]

2 голосов
/ 17 января 2010

Поскольку поле, которое вы пытаетесь изменить, изначально использовало виджет выбора, CCK будет искать $form_state['values']['field_sr_account'][0]['value']. Установив для поля тип #hidden и установив #value, вы получите его значение в $form_state['values']['field_sr_account']. CCK попытается получить доступ к первому элементу этого и в итоге получит первый символ значения.

Обновлено : Самый простой способ достичь того, что вам нужно, - это сделать что-то:

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
   if (arg(0) == 'user' && is_numeric(arg(1))) {
    $account = arg(1);
    $club = 2589;
    // Use this property to store the value to restore back
    $form['#field_sr_account'] = $club;
    $form['field_sr_account'] = array( '#type' => 'hidden','#value' => $club);
   }
}

/*in your submit handler, restore the value in the proper format*/
$form_state['values']['field_sr_account'] = array('0' => array('value' => $form['#field_sr_account']));

Старый ответ

Один из способов достижения того, что вы есть пытаясь сделать, это скопировать весь $form['field_sr_account'] в $form['#field_sr_account'], а затем предоставить значение через SQL запрос в нужном формате в сам обработчик отправки.

0 голосов
/ 10 января 2010

Разве вы не должны проверить

drupal_set_message($form_state['values']['field_sr_account']);

вместо

drupal_set_message($club);

в addSR_submit_function?

ОК, просто вопрос: не знаете, какой тип db_result возвращает для вашего запроса, может быть, он как-то связан с преобразованием типов? Итак, чтобы убедиться, что значение int.

'#value' => (int)$club
0 голосов
/ 13 января 2010

cinqoTimo, из любопытства что это за поле CCK? Это целое число, десятичное число, число с плавающей запятой? и есть ли у вас какие-либо специальные параметры в этом поле, которые обычно не включены по умолчанию? Какой тип столбца в БД?

Можете ли вы опубликовать вывод html формы. Это может дать ключ к пониманию того, что может происходить.

Используете ли вы какой-либо JavaScript для редактирования каких-либо значений для этого поля?

Вы пытались вывести результаты значений из ловушки addSR_form_service_request_node_submit? Любая разница там.

Извините за все вопросы. Просто подумайте вслух, поскольку кажется, что вы охватили большую часть своих баз.

0 голосов
/ 10 января 2010

Хорошо, посмотрите на http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#hidden против http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#value

Также рекомендуется использовать значение вместо скрытого. Вы можете найти эту информацию на http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6

Кроме того, тип «скрытый» не может иметь свойства, назначенные ему, так что это может вызвать проблемы. Любые проблемы использования, которые могут возникнуть у вас с API форм, должны быть найдены в этих ресурсах, так как мне все еще немного неясно, чего вы пытаетесь достичь ... особенно с помощью кнопки отправки.

Старый ответ:

Хорошо, если я правильно понимаю $ club установлен неправильно. Если первый результат вашего запроса номер, который вы ищете, то это должно работать.

Попробуйте позвонить

<?php print_r(db_fetch_array($result)) ?>

чтобы посмотреть на все возвращенное из запроса.

Мне немного неясно, что устанавливается неправильно. Если это #value внутри вашего связанного массива тогда виновником должен быть запрос. Если #value устанавливается правильно и что бы вы ни делали позже быть виновником (здесь не показано). Если это значения в вашем $form_state I не вижу, что вы используете $club здесь на все.

Также в вашем addSR_submit_function Вы, кажется, не используете $form переменная или использование $ club для чего-либо кроме установки сообщения, которое появляется в верхней части страницы вашего на когда это называется.

Возможно, мне понадобятся дополнительные разъяснения. что именно идет не так.

Кроме того, когда вы звоните drupal_set_message функция, ты просто делаю это для отладки цели?

...