2010-08-21 3 views
1

Общим способом обработки данных в Drupal является создание типа CCK, а затем создание пользовательского обработчика отправки для выполнения логики в полях CCK при отправке узла. Однако мне не удалось получить значение, когда тип поля CCK является полем «Дата», потому что массив структурирован по-разному.Только получение первого символа при доступе к переменной post

UPDATE - João Guilherme имел гораздо более простой подход, но я все еще не мог получить значение даты из массива, размещенного ниже.

$fromDate = $form['field_bill_start'][0]['#value']; 
drupal_set_message('<pre>'. print_r($fromDate, TRUE) .'</pre>'); 

//Which then prints this. 
Array 
(
    [value] => Array 
     (
      [date] => Tue, 08/24/2010 
     ) 

) 

Я затем попытался добавить те, которые напечатали null. Я также попробовал «#» перед датой и значением.

['value']['date'] 

************************* Оригинальная почта **************** ******************

<?php 
function billing_form_billing_node_form_alter(&$form, &$form_state) { 
    //drupal_set_message('We are hooking it!'); 
    $form['#submit'][] = 'billing_submit_function'; 
} 

function billing_submit_function($form, &$form_state) { 
    $fromDatePRE = array(); 
    $fromDatePRE[] = $form['field_bill_start'][0]['value']['date']; 
    $fromDate[] = $fromDatePRE[0]['#value']['#date']; 

    drupal_set_message('<pre>'. print_r($fromDatePRE[0], TRUE) .'</pre>'); 


    drupal_set_message("From Date = ".$fromDate[0]); 
    drupal_set_message("From Date2 = ".$fromDatePRE[0]); 

$ FromDate печатает первый символ "S" в сб 8/21/2010, который является значением Я хочу , но я хочу всю ценность. Я знаю, что это связано с тем, как я получаю доступ к массиву, но я не могу понять это.

Это то, что я работаю с - я добавил комментарий к значению Я пытаюсь получить доступ к:

Какие Yiedls:

Array 
    (
     [0] => Array 
      (
       [#type] => textfield 
       [#default_value] => Sat, 08/21/2010 
       [#id] => edit-field-bill-start-0-value-datepicker-popup-0 
       [#size] => 20 
       [#maxlength] => 30 
       [#attributes] => Array 
        (
        ) 

       [#description] => Format: Sat, 08/21/2010 
       [#post] => Array 
        (
         [title] => llllllllllllll 
         [menu] => Array 
          (
           [link_title] => 
           [parent] => Array 
            (
             [hierarchical_select] => Array 
              (
               [selects] => Array 
                (
                 [0] => primary-links:0 
                 [1] => label_1 
                ) 

              ) 

            ) 

           [weight] => 0 
          ) 

         [hs_form_build_id] => hs_form_7bf97c3c59ba2a064d6e841ae405dd30 
         [changed] => 
         [form_build_id] => form-1f928faaa990f3809da391165d51981a 
         [form_token] => 616f6e8a7bb9c4ffc2aec65174c0817d 
         [form_id] => billing_node_form 
         [log] => 
         [pathauto_perform_alias] => 1 
         [print_display] => 1 
         [print_display_urllist] => 1 
         [print_mail_display] => 1 
         [print_mail_display_urllist] => 1 
         [print_pdf_display] => 1 
         [print_pdf_display_urllist] => 1 
         [field_bill_start] => Array 
          (
           [0] => Array 
            (
             [value] => Array 
              (
               //This is the value I need 
               [date] => Sat, 08/21/2010 
              ) 

            ) 

          ) 

         [field_bill_end] => Array 
          (
           [0] => Array 
            (
             [value] => Array 
              (
               [date] => 08/25/2010 
              ) 

            ) 

          ) 

         [name] => administrator 
         [date] => 
         [status] => 1 
         [promote] => 1 
         [op] => Save 
        ) 

       [#programmed] => 
       [#tree] => 1 
       [#parents] => Array 
        (
         [0] => field_bill_start 
         [1] => 0 
         [2] => value 
         [3] => date 
        ) 

       [#array_parents] => Array 
        (
         [0] => field_bill_start 
         [1] => 0 
         [2] => value 
         [3] => date 
        ) 

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

       [#name] => field_bill_start[0][value][date] 
       [#value] => Sat, 08/21/2010 
       [#needs_validation] => 1 
       [#defaults_loaded] => 1 
       [#sorted] => 1 
      ) 

    ) 
+0

Вы написали '$ FromDate = [ '0'] [ '# значение'] [ '# дата'] ', который не даст вам обратно любое значение.Какова переменная, содержащая массив, к которому вы пытаетесь получить доступ? – kiamlaluno

+0

@kiamlaluno - Ты был прав. Я обновил код. Теперь, что показывается, производится «S» – tpow

+0

@cinqoTimo - какой объект вы омрачаете своим значением, чтобы получить результат в своем исходном сообщении? – w00d

ответ

2

Вы должны использовать значение, представленное пользователем, которое находится на $form_state;

Я проверил с одним полем даты вместо поля даты с двумя значениями. Но это должно работать нормально. У меня может быть неправильное название вашего поля, но вы можете проверить значения на $form_state['values'], где вы должны найти свое поле в списке.

В любом случае код будет выглядеть примерно так:

function billing_submit_function($form, &$form_state) { 
    $from_date = $form_state['values']['field_bill_start'][0]['value']; 
    $from_date_string = format_date(strtotime($from_date), 'custom', 'D d/m/Y'); 
    $from_date_2 = $form_state['values']['field_bill_start'][0]['value2']; 
    $from_date_string_2 = format_date(strtotime($from_date_2), 'custom', 'D d/m/Y'); 

    drupal_set_message("From Date = ".$from_date_string); 
    drupal_set_message("From Date2 = ".$from_date_string_2); 
} 
+0

@googletop - Вы правы - вы опубликовали правильное значение. – tpow

1

возвращения вы получаете, потому что вы обращаетесь строка, а не массив.

$string = "ABCDEFG"; 
// This would print "A". 
print $string[0]; 

Заметить то, что обработчик представления принимает представленные значения от $form_state['values'], а не от $form.

+0

Извините , Я пытался много разных вещей, чтобы попытаться заставить это работать. Я отправил неправильный фрагмент. – tpow

+0

Не уверен, что я последую за тобой. Если я ошибаюсь, почему я могу получить первую букву нужного мне значения? Вы можете показать мне, что вы имеете в виду под $ form_state ['values'] – tpow

+0

См. ['User_edit_submit()'] (http://api.drupal.org/api/function/user_edit_submit/6), ['book_outline_form_submit()' ] (http://api.drupal.org/api/function/book_outline_form_submit/6) и ['comment_form_submit()'] (http://api.drupal.org/api/function/comment_form_submit/6); ни один из этих обработчиков представления не получает представленные значения из '$ form'. В соответствии с ошибкой, которую вы описываете, проблема заключается в использовании строки, считающей ее массивом; в обоих случаях '$ variable [0]' является допустимым выражением, но для строки он возвращает первый символ (который в этом случае не тот, который вам нужен). – kiamlaluno

1

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

$fromDate = $form[0]['#post']['field_bill_start'][0]['value']['date']; 
drupal_set_message("From Date = ".$fromDate); 

EDIT:

Обновленный код, чтобы иметь еще одну попытку

+0

Спасибо, я соглашаюсь на ненужные массивы. Что вы предоставили отпечатки - From Date = "" (ничего) и From Date2 = Array – tpow

+0

Я обновил код, не могли бы вы попытаться снова? Если вывод, который у вас есть в вашем вопросе, поступает из инструкции print_r ($ fromDatePRE), тогда этот новый код должен работать. Думаю, – acqu13sce

+0

Спасибо, что у вас второй взгляд. Я знаю, что выглядит правильно, но это пусто. Я думаю, просто используя текстовое поле (которое я могу легко захватить значение !?) и использовать календарь JQuery для установки значения. – tpow

1

Я думаю, вам просто нужно напечатать $form['field_bill_start'][0]['#value'].

Обновление: Распечатайте непосредственно $form['field_bill_start'][0]['#value'], не добавляйте его в переменную или массив.

+0

Что печатает «Массив» – tpow

+0

Я обновил сообщение с результатами print_r. Я думал, что могу добавить уровни массивов, как показано. – tpow