2010-08-21 81 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

相关问题