이 모든 것이 하나의 양식 요소에 있어야하는 특별한 이유가 있습니까? 데이터가 올바르게 설정 되었다면 루프를 반복하면서 다소 조직적인 방식으로 요소를 생성 할 수 있습니다.
그리고 양식이 제출 될 때, 몇 가지 체크 박스를 체크 한 가정하면이 $submitted_values
는 다음과 같습니다 :
function my_test_form($form_state) {
// Assuming you have your data in a format like this
$categories = array(
'cat1' => array(
'#title' => 'category 1',
'sub1' => 'Subcat1',
'sub2' => 'Subcat2',
),
'cat2' => array(
'#title' => 'category 2',
'sub21' => 'Subcat21',
'sub22' => 'Subcat22',
),
'cat3' => 'category 3',
);
$elements = array();
foreach ($categories as $cat => $data) {
// If multidimensional, create parent and loop through children
if (is_array($data)) {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data['#title'],
'#return_value' => $cat,
);
foreach (element_children($data) as $subcat) {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data[$subcat],
'#attributes' => array(
'style' => 'margin-left: 2em',
),
'#return_value' => $cat . '-' . $subcat,
);
}
}
// Else, just create top level
else {
$elements[] = array(
'#type' => 'checkbox',
'#title' => $data,
'#return_value' => $cat,
);
}
}
// Group all of these elements together. They'll be submitted into the same array.
$form['categories'] = $elements;
$form['categories']['#tree'] = TRUE;
$form['categories']['#prefix'] = '<div style="font-weight:bold" class="label">' . t('Checkboxes title') . ':</div>';
$form['submit'] = array(
'#value' => t('Submit me'),
'#type' => 'submit',
);
return $form;
}
function my_test_form_submit($form, &$form_state) {
$submitted_values = array_filter($form_state['values']['categories']);
}
는 다음과 같이 렌더링
이 array('cat2', 'cat2-sub21', 'cat2-sub22')
당신은을 변경할 수 있습니다를 변경하여 제출 처리자에게 제출 된 체크 박스 값 위의 각 체크 상자에 설정 한 10 개의 속성.
제출 된 값은 모두 $form['categories']
섹션에 있기 때문에 함께 그룹화 될뿐만 아니라 #tree
은 TRUE
으로 설정되기 때문에 함께 그룹화됩니다.
귀하의 솔루션은 디스플레이와 관련하여 훌륭하게 작동합니다. 하지만 체크 박스 대신 체크 박스가 필요한 카테고리가 필요합니다. 확인란의 이름은 카테고리 []와 같아서 모든 하위 카테고리에 대해 게시물을 통해 값을 가져올 수 있으며 하위 카테고리 []입니다. 가능한가? 제발 조언. 감사합니다. –
여러 폼 요소를 통해 설명 할 수 있습니다. 카테고리 및 하위 카테고리에 대해 반환 된 데이터의 형식을 정확히 지정하려면 어떻게해야합니까? '$ form_state [ 'category'] = array ('cat1', 'sub1', 'sub2')'또는'$ form_state [ 'category'] = array ('cat1' , 'cat2', array ('sub1', 'sub2', 'sub21'))'etc? – Aiias
하나의 배열에 모두 좋지만 모양이 이미지와 같아야합니다. 그래서 모든 것은 하나의 체크 박스 제목 아래에 있어야합니다. –