2010-08-21 44 views
1

我在Drupal中處理事情的一種常見方式是創建一個CCK類型,然後創建一個自定義提交處理程序,以便在提交節點時在CCK字段上執行邏輯。但是,當CCK字段類型是日期字段時,我一直無法獲取該值,因爲數組結構不同。訪問帖子變量時只獲取第一個字符

更新 - JoãoGuilherme有一個更簡單的方法,但我仍然無法從下面發佈的數組中獲取日期值。

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

$ FROM日期是印刷星期六2010年8月21日的第一個字母「S」,這是我想值,但我想要整個價值。我知道這與我如何訪問數組有關,但我無法弄清楚。

這就是我的工作 - 我加入到我試圖訪問值評論:

其中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 2010-08-22 20:05:25

+0

@kiamlaluno - 你是對的。我已經更新了代碼。現在顯示的是產生「S」 – tpow 2010-08-22 20:56:42

+0

@cinqoTimo - 你愚蠢的價值,以獲得您的原始文章的結果是什麼對象? – w00d 2010-08-26 08:50:14

回答

2

您應該使用用戶提交的值在$form_state;

我使用單個日期字段進行測試,而不是使用2個值的日期字段。但是,無論如何,這應該工作得很好。我可能會將您的字段命名爲不正確,但您可以查看$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 2010-08-29 16:07:45

1

您得到的回報是因爲你正在訪問一個字符串,而不是一個數組。

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

注意到那麼提交處理程序從$form_state['values']$form需要提交的值,而不是。

+0

對不起,我嘗試了很多不同的事情來試圖讓這個工作。我發佈了錯誤的代碼片段。 – tpow 2010-08-22 21:33:23

+0

不知道我關注你。如果我的數組錯了 - 爲什麼我可以得到我需要的值的第一個字母?你可以告訴我你的意思$ form_state ['values'] – tpow 2010-08-23 10:45:35

+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 2010-08-23 21:56:45

1

試試這個,我刪除了我以前的答案,一旦我真的看了一下代碼,並注意到我以前沒有路。似乎有很多冗餘陣列在我看來只是混淆了這個問題。這是否工作?

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

編輯:

更新的代碼有另一個嘗試

+0

謝謝,我同意不必要的數組。你提供的打印 - 從日期=「」(無)和從日期2 =數組 – tpow 2010-08-24 02:15:07

+0

我已經更新了代碼,你會介意再試一次嗎? 如果你在問題中的輸出是來自print_r($ fromDatePRE)語句,那麼這個新的代碼應該可以工作我認爲 – acqu13sce 2010-08-24 03:10:48

+0

感謝您再次看看。我知道這看起來是正確的,但它是空的。我正在考慮使用一個文本框(我可以輕鬆捕獲這個值!),並使用Jquery日曆來設置值。 – tpow 2010-08-25 00:36:25

1

我認爲你需要打印$form['field_bill_start'][0]['#value']

更新:直接打印$form['field_bill_start'][0]['#value'],不要將它添加到變量或數組。

+0

打印「陣列」 – tpow 2010-08-25 00:17:10

+0

我使用print_r的結果更新了我的文章。我想我可以添加像圖所示的數組級別。 – tpow 2010-08-25 02:06:04

相關問題