Why in my module, value of this field is not passed to hook_insert/update ? values of $field_1 and $field_2 are send.

$form[$field_1][$field_2][$field_3] = array(
'#type' => 'textfield',
'#size' => 6,
'#field_suffix' => t('tons'),
'#field_prefix' => t('Sale'),
);

Any hint ?

Comments

nevets’s picture

First $field_1, $field_2 and $field_3 to be to strings, lets say they are 'a', 'b' and 'c' (generally the strings need to be valid PHP variable names). Using the example values, you should see 'c' in hook_insert and hook_update.

kcybulski’s picture

So if this should work "by default", there must be error in my code, full hook_form()

function produkcja_form(&$node) {
global $user;
$type = node_get_types('type', $node);
$term_get_vocs = taxonomy_get_vocabularies($type->type);

foreach($term_get_vocs as $term_get_voc) {

    $terms = taxonomy_get_tree($term_get_voc->vid,0,-1,1);

    foreach ($terms as $term) {
	$tr = $term->name;
	$tr_id = $term->tid;
	$tr_size = 'size_'.$tr;
	$tr_id_size = 'size_'.$tr_id;

	$form["term_$tr_id"] = array(
	'#type' => 'fieldset',
	'#title' => t('Gatunek: '.$tr),
	'#collapsible' => TRUE,
	'#collapsed' => TRUE,
	);

	$terms_2 = taxonomy_get_tree($term_get_voc->vid,$term->tid,-1,1);
	    foreach ($terms_2 as $term_2) {
		$tr2 = $term_2->name;
		$tr2_id = $term_2->tid;
		$tr2_size = 'size_'.$tr2;
		$tr2_id_size = 'size_'.$tr2_id;

		  $form["term_$tr_id"]["size_$tr2_id"] = array(
		  '#type' => 'textfield',
		  '#title' => t($tr2),
		  '#size' => 6,
		  '#default_value' =>  isset($node->{$tr2_id_size}['size']) ? $node->{$tr2_id_size}['size'] : '',
		  '#maxlength' => 6,
		  '#required' => FALSE,
		  );
		
		for ($i=1;$i <=2; $i++) {
		    $tr2_id_date_i = 'date_'.$tr2_id.'_'.$i;
		    $tr2_id_size_i = 'size_'.$tr2_id.'_'.$i;
		    
		    $form["term_$tr_id"][$tr2_id_date_i] = array(
		    '#type' => 'date_popup',
		    '#date_format' => 'd-m-Y',
		    '#size' => 10,
		    '#default_value' => isset($node->{$tr2_id_date_i}['date']) ? $node->{$tr2_id_date_i}['date'] : '',
		    );

All fields above works fine, I see them in print_r($node) in hook_update, but not this one

		    $form["term_$tr_id"][$tr2_id_date_i][$tr2_id_size_i] = array(
		    '#type' => 'textfield',
		    '#default_value' => isset($node->{$tr2_id_size_i}['size']) ? $node->{$tr2_id_size_i}['size'] : '',
		    '#size' => 6,
		    );
		}
	    }
    }
}
return $form;
}
nevets’s picture

When you have something like $form['a']['b']['c'], the form api only "remembers" 'c' unless you set '#tree' to TRUE on the outer elements ( ex $form['a']['#tree'] = TRUE).

kcybulski’s picture

But I don't care if it is $form[a][b][c], for me $form[c] is OK, but for now I don't get this at all,

stdClass Object ( [nid] => 27 [vid] => 27 [uid] => 1 [created] => 1250365681 [type] => produkcja [language] => pl [changed] => 1250402364 [title] => Produkcja 2009/2010 [term_1] => Array ( [size_5] => 12 [date_5_1] => 2009-08-31 00:00:00 [date_5_2] => [size_6] => [date_6_1] => [date_6_2] => [size_7] => [date_7_1] => [date_7_2] => [size_8] => [date_8_1] => [date_8_2] => [size_9] => [date_9_1] => [date_9_2] => ) [term_2] => Array ( [size_10] => [date_10_1] => [date_10_2] => [size_11] => [date_11_1] => [date_11_2] => [size_12] => [date_12_1] => [date_12_2] => [size_13] => [date_13_1] => [date_13_2] => [size_14] => [date_14_1] => [date_14_2] => [size_15] => [date_15_1] => [date_15_2] => [size_16] => [date_16_1] => [date_16_2] => [size_17] => [date_17_1] => [date_17_2] => ) [term_3] => Array ( [size_18] => [date_18_1] => [date_18_2] => [size_19] => [date_19_1] => [date_19_2] => [size_20] => [date_20_1] => [date_20_2] => [size_21] => [date_21_1] => [date_21_2] => [size_22] => [date_22_1] => [date_22_2] => [size_23] => [date_23_1] => [date_23_2] => [size_24] => [date_24_1] => [date_24_2] => [size_25] => [date_25_1] => [date_25_2] => [size_26] => [date_26_1] => [date_26_2] => [size_27] => [date_27_1] => [date_27_2] => [size_28] => [date_28_1] => [date_28_2] => [size_29] => [date_29_1] => [date_29_2] => [size_30] => [date_30_1] => [date_30_2] => [size_31] => [date_31_1] => [date_31_2] => [size_32] => [date_32_1] => [date_32_2] => [size_33] => [date_33_1] => [date_33_2] => [size_34] => [date_34_1] => [date_34_2] => [size_35] => [date_35_1] => [date_35_2] => [size_36] => [date_36_1] => [date_36_2] => [size_37] => [date_37_1] => [date_37_2] => [size_38] => [date_38_1] => [date_38_2] => [size_39] => [date_39_1] => [date_39_2] => [size_40] => [date_40_1] => [date_40_2] => [size_41] => [date_41_1] => [date_41_2] => [size_42] => [date_42_1] => [date_42_2] => [size_43] => [date_43_1] => [date_43_2] => [size_44] => [date_44_1] => [date_44_2] => [size_45] => [date_45_1] => [date_45_2] => [size_46] => [date_46_1] => [date_46_2] => [size_47] => [date_47_1] => [date_47_2] => [size_48] => [date_48_1] => [date_48_2] => [size_49] => [date_49_1] => [date_49_2] => [size_50] => [date_50_1] => [date_50_2] => [size_51] => [date_51_1] => [date_51_2] => [size_52] => [date_52_1] => [date_52_2] => [size_53] => [date_53_1] => [date_53_2] => [size_54] => [date_54_1] => [date_54_2] => ) [term_4] => Array ( [size_55] => [date_55_1] => [date_55_2] => [size_56] => [date_56_1] => [date_56_2] => [size_57] => [date_57_1] => [date_57_2] => [size_58] => [date_58_1] => [date_58_2] => [size_59] => [date_59_1] => [date_59_2] => [size_60] => [date_60_1] => [date_60_2] => [size_61] => [date_61_1] => [date_61_2] => [size_62] => [date_62_1] => [date_62_2] => ) [name] => kcybulski [date] => 2009-08-15 21:48:01 +0200 [status] => 1 [promote] => 0 [sticky] => 0 [op] => Zachowaj [submit] => Zachowaj [preview] => Podgląd [delete] => Usuń [form_build_id] => form-9dfc424b2e07d56341b836123cd132c4 [form_token] => 1e6fc3542733ca6ffb97cb4dd68ca705 [form_id] => produkcja_node_form [comment] => 2 [menu] => Array ( [mlid] => 0 [module] => menu [hidden] => 0 [has_children] => 0 [customized] => 0 [options] => Array ( ) [expanded] => 0 [parent_depth_limit] => 8 [link_title] => [parent] => primary-links:0 [weight] => 0 [plid] => 0 [menu_name] => primary-links ) [upload] => [attach] => Załącz [teaser] => [format] => 0 [validated] => 1 [is_new] => [timestamp] => 1250402364 ) 

I get values of

$form[$term_tr_id] => (array [term_1]), 
$form[$term_tr_id][$tr2_id_size]  => [size_5],
$form[$term_tr_id][$tr2_id_date_i] => [date_5_1],

but I don't get value of

$form[$term_tr_id][$tr2_id_date_i][$tr2_id_size_i]

it should be [size_5_1] ?

nevets’s picture

I see where you set $form["term_$tr_id"]["size_$tr2_id"] = array( as a date popup, I don't believe it can have child fields like $form["term_$tr_id"][$tr2_id_date_i][$tr2_id_size_i] = array(

kcybulski’s picture

Yes, it's seems that nesting fields is completely broken, you can nest inside "fieldset" and nothing more. For now I solved this by:

$form[a] = fieldset
$form[a][b] = textfield
$form[a][c] = fieldset

$form[a][c][d] = fieldset
$form[a][c][d][e] = date_popup
$form[a][c][d][f] = textfield

$form[a][c][g] = fieldset
$form[a][c][g][h] = date_popup
$form[a][c][g][i] = textfield

madness, two additional fields, added for nothing :-(

BTW: Do you know how to show date_popup and textfield in one line ? two "textfield" fields do this automagicly

Chris

nevets’s picture

You can get rid of the fieldset with

$form[a][c][d][e] = date_popup
$form[a][c][d][f] = textfield