Формы в таблице не будут отображаться
Я пытаюсь отобразить форму в таблице, но она показывает пустой результат, в то время как отображается заголовок. Я не могу понять, что я делаю не так.
/*
* cart form and page display
*/
function cart_page_form() {
$form=array();
$form['#tree'] = TRUE;
$checkboxes=array();
foreach($_SESSION['cart'] as $key => $qty) {
$checkboxes[$key] = '';
$form['checkboxes'][$key] = array(
'#type' => 'checkbox',
'#default_value' =>check_plain($key),
);
$form['quantinty'][$key] = array(
'#type' => 'textfield',
'#size' => 4,
'#maxlength' => 4,
'#id' => 'prod_qty',
'#default_value' => check_plain($qty),
);
$form['price'][$key]['#value'] = t('244p');
}
$form['remove'] = array(
'#type' => 'button',
'#name' => 'remove_selected',
'#value' => t('Remove selected'),
);
$form['submit'] = array(
'#type' => 'button',
'#name' => 'update_quantity',
'#value' => t('Update'),
);
$form['checkout'] = array(
'#type' => 'submit',
'#name' => 'checkout',
'#value' => t('Зделать заказы'),
);
return $form;
}
/**
*Implementation of hook_theme().
*
*/
function yalublurudn_theme() {
return array(
'cart_page_form' => array('variables' => array('form' => NULL)),
);
}
/**
* display cart page
*/
function theme_cart_page_form($form) {
$rows = array();
foreach(element_children($form) as $key) {
if (isset($form['checkboxes'][$key])) { //// make sure this is one of our table rows
$row = array();
$row[] = array('data' => drupal_render($form['checkboxes'][$key]));
$row[] = array('data' =>drupal_render($form['quantinty'][$key]));
$row[] = array('data' =>drupal_render($form['price'][$key]));
$rows[] = $row;
}
}
$header = array(
'Checkboxes',
'Title',
'Quantity',
);
$output = theme('table', array('header' => $header, 'rows' => $rows));
$output .= drupal_render($form); // Render rest of form components.
return $output;
}
1
Author: kiamlaluno, 2012-07-13
1 answers
В Drupal 7 функция темы, подобная вашей, получает массив, содержащий переменные, объявленные в hook_theme()
. Если вы выполните element_children($form)
с определенной вами формой, вы получите массив, содержащий следующие значения:
- флажки
- количество
- цена
- удалить
- отправить
- оформление заказа
Оператор управления if (isset($form['checkboxes'][$key])) {
не будет выполнен, если не в том случае, если у вас есть $form['checkboxes']['checkboxes']
и т.д.
Ваша функция темы должна использовать следующий код.
function theme_cart_page_form($variables) {
$form = $variables['form'];
$rows = array();
foreach(element_children($form['checkboxes']) as $key) {
$row = array();
$row[] = array('data' => drupal_render($form['checkboxes'][$key]));
$row[] = array('data' =>drupal_render($form['quantinty'][$key]));
$row[] = array('data' =>drupal_render($form['price'][$key]));
$rows[] = $row;
}
$header = array(
'Checkboxes',
'Title',
'Quantity',
);
$output = theme('table', array('header' => $header, 'rows' => $rows));
$output .= drupal_render_children($form); // Render rest of form components.
return $output;
}
На самом деле, вы должны объявить функцию темы, используя следующий код.
function yalublurudn_theme() {
return array(
'cart_page_form' => array('render element' => 'form'),
);
}
4
Author: kiamlaluno, 2012-07-13 16:26:54