2013-03-16 4 views
0

drupal7에 양식이 있습니다.Drupal 체크 박스 생성

내가 필요한 것 : 나는 카테고리와 하위 카테고리가 있습니다. 나는

$form['rate_the_room']['talent'] = array(
    '#prefix'=>'<h1>category:</h1>', 
    '#type' => 'checkboxes', 
    '#options' => $sub_tal, 

); 
다음은 $ sub_tal

배열이 같은 코드를 사용

enter image description here

같이 체크 박스에 표시합니다합니다. 그것은 단일 차원 배열면 잘 작동합니다. 여기에 배열을 전달하는 방법 (카테고리, 하위 카테고리는 db에서 온 것입니다). 이 코드로이 구조체를 유지하는 방법.

감사합니다.

답변

1

이 모든 것이 하나의 양식 요소에 있어야하는 특별한 이유가 있습니까? 데이터가 올바르게 설정 되었다면 루프를 반복하면서 다소 조직적인 방식으로 요소를 생성 할 수 있습니다.

Categories image2

그리고 양식이 제출 될 때, 몇 가지 체크 박스를 체크 한 가정하면이 $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'] 섹션에 있기 때문에 함께 그룹화 될뿐만 아니라 #treeTRUE으로 설정되기 때문에 함께 그룹화됩니다.

+0

귀하의 솔루션은 디스플레이와 관련하여 훌륭하게 작동합니다. 하지만 체크 박스 대신 체크 박스가 필요한 카테고리가 필요합니다. 확인란의 이름은 카테고리 []와 같아서 모든 하위 카테고리에 대해 게시물을 통해 값을 가져올 수 있으며 하위 카테고리 []입니다. 가능한가? 제발 조언. 감사합니다. –

+0

여러 폼 요소를 통해 설명 할 수 있습니다. 카테고리 및 하위 카테고리에 대해 반환 된 데이터의 형식을 정확히 지정하려면 어떻게해야합니까? '$ form_state [ 'category'] = array ('cat1', 'sub1', 'sub2')'또는'$ form_state [ 'category'] = array ('cat1' , 'cat2', array ('sub1', 'sub2', 'sub21'))'etc? – Aiias

+0

하나의 배열에 모두 좋지만 모양이 이미지와 같아야합니다. 그래서 모든 것은 하나의 체크 박스 제목 아래에 있어야합니다. –

관련 문제