2013-04-26 8 views
0

drupal_render에 문제가 있습니다. drupal_render가 내가 원하는 것을 얻을 수있는 올바른 방법이라고 가정합니다.D6 : drupal_render가 여러 가지 문제를 일으킴 (기본값, ID, date_select)

양식을 작성 중입니다. FAPI는 "테이블"필드를 제공하지 않으므로 직접 작성하고 싶습니다. 내 접근 방식 : theme() - 함수, 특히 theme ('table', ...) 또는 theme_table()을 사용하고 해당 양식 필드를 채 웁니다 (나중에 AHAH 기능을 추가 할 의도가 있음). 이렇게하면 drupal_render를 표 셀의 값으로 사용하게되어 양식 요소에 문제가 발생합니다.

이 테이블은 사용자가 현재 편집중인 조직의 연도 별 직원 수를 수집합니다. 코드는 다음과 같습니다 여기

$form['employees'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Employees'), 
    '#collapsible' => TRUE, 
    '#collapsed' => FALSE, 
); 

$employee_query = db_query("SELECT * FROM {employees} WHERE id_organisation = %d", $org['idoOrganisation']); 
$employee = array(); 
while ($row = db_fetch_array($employee_query)) { 
    $employee[] = $row; 
} 

$header = array(
    t('Year'), 
    t('Total'), 
    t('Internal'), 
    t('External'), 
    t('Aerospace') 
); 

$em_delta = 0; 
$rows = array(); 

foreach($employee as $em_delta => $value) { 
    $form['employees'][$em_delta]['year'] = array(
     '#title' => '', 
     '#type' => 'date_select', // Comes with the date module 
     '#date_format' => $format_year, 
     '#date_label_position' => 'within', 
     '#date_year_range' => '-50:+3', 
     '#default_value' => $value[$em_delta]['year'], 
     '#id' => 'edit-employees-' . $em_delta . '-year', // Allready a quickfix, since the form is rendered without id 
     '#name' => 'employees['.$em_delta.'][year]', // Same here 
    );  
    $form['employees'][$em_delta]['total'] = array(
     '#type' => 'textfield', 
     '#title' => '', 
     '#default_value' => $value['total'],, 
     '#size' => 1, 
     '#id' => 'edit-employees-' . $em_delta . '-total', 
     '#name' => 'employees['.$em_delta.'][total]' 
    ); 
    $form['employees'][$em_delta]['internal'] = array(
     '#type' => 'textfield', 
     '#title' => '', 
     '#default_value' => $value[$em_delta]['internal'], 
     '#size' => 1, 
     '#id' => 'edit-employees-' . $em_delta . '-internal', 
     '#name' => 'employees['.$em_delta.'][internal]', 
    ); 
    $form['employees'][$em_delta]['external'] = array(
     '#type' => 'textfield', 
     '#title' => '', 
     '#default_value' => $value[$em_delta]['external'], 
     '#size' => 1, 
     '#id' => 'edit-employees-' . $em_delta . '-external', 
     '#name' => 'employees['.$em_delta.'][external]', 
    );  
    $form['employees'][$em_delta]['aero'] = array(
     '#type' => 'textfield', 
     '#title' => '', 
     '#default_value' => $value[$em_delta]['aero'], 
     '#size' => 1, 
     '#id' => 'edit-employees-' . $em_delta . '-aero', 
     '#name' => 'employees['.$em_delta.'][aero]', 
    );  

    $rows[] = array(
     drupal_render($form['employees'][$em_delta]['year']), 
     drupal_render($form['employees'][$em_delta]['total']), 
     drupal_render($form['employees'][$em_delta]['internal']), 
     drupal_render($form['employees'][$em_delta]['external']), 
     drupal_render($form['employees'][$em_delta]['aero']), 
    ); 
} 

$form['employees']['table'] = array (
    '#value' => theme('table', $header, $rows, array(), NULL) 
); 

는 문제 나 발생하고 있습니다

  • ID- 양식 요소의 이름 속성 비어 있습니다. 나는 drupal 사이트에서 이걸 발견하고 그것을 (내 이해는 못하지만) 내 평화로 만들었습니다. 수동으로 그 속성을 설정했습니다.
  • 텍스트 필드의 기본값은 무시됩니다. 필드가 비어 있습니다. drupal_get_form이 필드를 렌더링하게하면 default_value가 표시됩니다. 누군가 여기서 # 값 속성을 설정하라는 제안을했지만 다시 읽으면 이것은 완전히 다른 무언가이며 문제를 일으킬 수 있다는 것을 알았습니다.
  • date_select-Field가 전체적으로 렌더링되지 않습니다. 래퍼가 있지만 선택 입력란은 코드 바깥, 표 바로 앞에 (즉, 코드에 나타나는 위치) 나타납니다.

하자. = 아무도 도와 줄 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

내 동료는 양식 기능 내에서 drupal_render를 사용하는 것이 좋은 아이디어가 될 수있는 이벤트가 아니라는 사실을 지적했습니다. 이는 유효성 검사 및 제출의 전체 프로세스에서 양식의 일부를 제거하기 때문입니다.

따라서 함수가 의도 한대로 작동하지 않는 이유를 알아내는 것은 효과가 없습니다. 더 나은 접근법은 필요한 양의 양식 필드를 간단히 생성하여 drupal_get_form() 내에서 렌더링되도록하고 나중에 양식 테마 기능을 사용하여 테이블에 배치하는 것입니다.

어리석은 me =)