Έχω κάνει μια Φόρμα με: Hook Menu, Hook Form και Hook Theme Όμως προσπαθώ να εμφανίσω μερικά πεδία της φόρμας με μορφή πινάκα ( δηλαδή με γραμμές και στήλες) χρησιμοποιώ το Hook Theme Table σύμφωνα με τα tutorials του Drupal.org site όμως κάτι δεν πάει καλά. Δεν μπορώ να χρησιμοποιήσω τα υπάρχοντα modules όπως Webform για την φόρμα γιατί θέλω τα δεδομένα που βάζει ο χρήστης να τα σώζω στη βάση δεδομένων και από όσο ξέρω δεν υπάρχει κανένα τέτοιο module. Παραθέτω τον κώδικα παρακάτω αν κάποιος μπορεί να βοηθήσει.
/**
* Implementation of hook_theme.
*/
function f_insert_theme($existing, $type, $theme, $path) {
return array(
'f_insert_form_table' => array(
// The renderable element is the form.
'render element' => 'form',
),
);
}
function f_insert_form($form, &$form_state){
$form = array();
$form['#theme'] = 'f_insert_form_table';
$form['company'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#size' => 50,
'#default_value' => "",
'#maxlength' => 50,
'#required' => TRUE, //make this field required
);
$form['#tree'] = TRUE;
$form['num'] = array(
'#type' => 'textfield',
'#title' => t('Number'),
'#size' => 20,
'#default_value' => "",
'#maxlength' => 20,
'#required' => TRUE,
);
$form['money'] = array(
'#type' => 'textfield',
'#title' => t('Money'),
'#size' => 20,
'#default_value' => "",
'#maxlength' => 20,
'#required' => TRUE,
);
$form['total'] = array(
'#type' => 'textfield',
'#title' => t('Total'),
'#size' => 20,
'#default_value' => "",
'#maxlength' => 20,
);
$form['add_row'] = array(
'#type' => 'submit',
'#value' => t('+'),
);
$form ['submit'] = array(
'#type' => 'submit',
'#value' => t('Add New Entry'),
);
return $form;
}
/**
* Theme callback for the form table.
*/
function theme_f_insert_form_table($form) {
// Get the userful values.
$header = array(t('AddNew'),t('Amount'), t('Price'), t('Total'));
foreach (element_children($form) as $key) {
$row[] = array(
'data' => drupal_render($form['add_row'][$key]),
'data' => drupal_render($form['num'][$key]),
'data' => drupal_render($form['money'][$key]),
'data' => drupal_render($form['total'][$key]),
);
}
$rows[] = $row;
$output = drupal_render($form['company']);
// Redner the table and return.
$output .= theme('table', array('header' => $header, 'rows' => $rows));
// Render the remainder of the form.
// This is crucial for proper function.
$output .= drupal_render($form);
return $output;
}