Формы в таблице не будут отображаться


Я пытаюсь отобразить форму в таблице, но она показывает пустой результат, в то время как отображается заголовок. Я не могу понять, что я делаю не так.

/*
 * 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;
}
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