2013-04-26 4 views
0

У меня проблема с drupal_render (предполагая, что drupal_render - это правильный способ получить то, что я хочу - не стесняйтесь исправить меня =).D6: drupal_render в форме вызывает различные проблемы (значение по умолчанию, ID, date_select)

Я строил форму. Поскольку FAPI не предоставляет поля «table», я хочу сделать это сам. Мой подход: используйте функцию 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 визуализировать это поле, отображается значение по умолчанию. Кто-то здесь предложил установить # значение-свойство вместо этого, но потом я снова прочитал, что это нечто совершенно другое и может вызвать проблемы.
  • Поле date_select не отображается полностью. Обертки есть, поле выбора, однако, появляется вне кода, непосредственно перед таблицей (то есть где оно появляется в коде).

Будем надеяться, что это будет =) Может ли кто-нибудь помочь? Что я делаю не так?

ответ

0

Один из моих коллег указал, что использование drupal_render в функции формы не является событием удаленно близко к тому, чтобы быть хорошей идеей, так как оно удаляет часть формы из всего процесса проверки и отправки.

Таким образом, выяснение того, почему функция не работает должным образом, бесполезна. Лучшим подходом было бы просто создать необходимое количество полей формы, позволить их отображать, как они есть в drupal_get_form(), и позже использовать тематическую функцию форм, чтобы поместить их в таблицу.

Stupid me =)

 Смежные вопросы

  • Нет связанных вопросов^_^