Вывод таблицы из формы

Главные вкладки

Аватар пользователя Tutmanov Tutmanov 27 января 2010 в 8:33

Как можно реализовать вывод таблицы из формы (в принципе в любом формате), чтобы его в дальнейшим открыть в MS Exel.
Есть форма, как его преобразовать.

<?php
// Здесь мы просто говорим Друпалу, что по адресу 'my_module/form' должен
// выводиться результат работы функции 'my_module_form' (см. ниже), но только
// если пользователь имеет права просмотра содержимого сайта ('access content').
// Особо любопытным — читать описание хука hook_menu() здесь:
// http://api.drupal.ru/api/function/hook_menu
function my_module_menu() {
  
$items = array();
  
$items['my_module/form'] = array(
    
'title' => 'My form',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('my_module_my_form'),
    
'access arguments' => array('access content'),
    
'description' => 'My form',
    
'type' => MENU_CALLBACK,
  );
  return 
$items;
}

// Эта функция вызывается каждый раз, когда мы посещаем страницу 'my_module/form'.
// Функция генерирует и возвращает нашу форму.
function my_module_form() {

  

// Форма конструируется при помощи функции drupal_get_form(),
  // в которую нам нужно передать название "функции-строителя" формы.
  
return drupal_get_form('my_module_my_form');

}

// Функция-строитель нашей формы.
// Notice it takes one argument, the $form_state
function my_module_my_form($form_state) {
  
// Мы создаем элемент "набор полей" и помещаем в него два текстовых
  // поля — для имени, фамилии и отчества.
  //
  // При внимательном рассмотрении этого кода, вы можете заметить, что имя, фамилия
  //  и отчество объявляются как под-масссивы внутри $form['name']. Это говорит друпалу,
  // что эти элементы нужно поместить внутрь набора полей 'Name'.

  // Наш первый элемент формы — тестовое поле с заголовком "Name".
  // Обратите внимание, что 'Name' обернуто в функцию t(). Это
  // обеспечит дальнейший перевод слова 'Name', чтобы, например,
  // при включенной русской локализации поле называлось 'Имя'.

  

$form['name'] = array(
    
'#type' => 'fieldset',
    
'#title' => t('Name'),
    
'#collapsible' => TRUE// распахивающийся
    
'#collapsed' => False// и не схопнутый по-умолчанию
  
);
  
// Делаем эти поля обязательными
  //
  // Демонстрация дополнительных аттрибутов текстовых полей.
  //
  // Полный список элементов форм и их аттрибутов можно глянуть здесь:
  // http://api.drupal.ru/api/file/developer/topics/forms_api_reference.html
  //
  // Обратите внимание, что в аттрибутах типа #description следует
  // стараться использовать английские значения, обернутые в t().
  // Это облегчит вам дальнейшую жизнь, если в иной день вы
  // захотите сделать многоязычную версию сайта. Если же вы уверены,
  // что локализации не будет, или ваш английский оставляет желать лучшего,
  // совсем не запрещено указывать там значения прямо на русском.
  // Однако, в этом случае КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО оборачивать их в t().
  
$form['name']['first'] = array(
        
'#type' => 'textfield',
        
'#title' => t('First Name'),
        
'#required' => TRUE// добавлено обязательное заполнение
        
'#default_value' => t("First name"), //добавлена значение по умолчанию
        
'#description' => t("Pleas enter your first name."), //Добавлена подпись
        
'#size' => 20//ширина поля
        
'#maxlength' => 20//добавлена максимальная длина строки ввода
    
);
    
$form['name']['middle'] = array(
        
'#type' => 'textfield',
        
'#title' => t('Middle name'),
        
'#required' => TRUE// добавлено обязательное заполнение
    
);
    
$form['name']['last'] = array(
        
'#type' => 'textfield',
        
'#title' => t('Last name'),
        
'#required' => TRUE// добавлено обязательное заполнение
    
);
  
// Новое поле — год рождения. Мы произведем проверку значения
  // этого поля в функции валидации формы.
      
$form['year_of_birth']=array(
          
'#type' => 'textfield',
          
'#title' => t('Year of birth'),
          
'#description' => t('Format is "YYYY"'),
      );

  

// Добавим в форму простую кнопку отправки. Обратите внимание на то,
  // что при нажатии на кнопку, вы вернетесь обратно на форму, а все ее
  // поля будут очищены. Это стандартное поведение форм.
   
$form['submit'] = array(
    
'#type' => 'submit',
    
'#value' => 'Send my request',
    );
  return 
$form;
}
function 
my_module_my_form_submit($form, &$form_state) {
    global 
$user;
    
db_query("INSERt INTO {all_user_orders} (order_id, order_time, user_id, user_ip, user_item)
    VALUES (%d, %d, %d, '%s', %d)"
NULLstrtotime('now'), $user->uid$_SERVER['REMOTE_ADDR'], $form_state['values'] ['order']);
    
drupal_set_message(t('Your request has been sent to avaya.mkt.list'));
}
// Добавляем функцию валидации формы. В ней мы будем проверять
// значение поля "год рождения", чтобы быть уверенными, что оно
// находится между 1900 и 2000. Если нет, будет выбрасываться ошибка.
//
// Обратите внимание на название функции. Это просто название
// функции-строителя формы с  '_validate' на конце. Названная таким
// образом функция, будет служить валидатором формы.

function mu_module_my_form_validate($form, &$form_state) {
    
$year_of_birth $form_state['values']['year_of_birth'];
    if (!
$year_of_birth || ($year_of_birth 1900 || $year_of_birth 2000)) {
        
form_set_error('year_of_birth't('Enter a year between 1900 and 2000.'));
    }
}
?>

Если можно, распишите по подробнее пожалуйста.

Комментарии

Аватар пользователя ygerasimov@drupal.org ygerasimov@drup... 27 января 2010 в 9:12

Если вопрос о том как форму вывести в табличном виде, то нужно смотреть в сторону функции темизации формы (атрибут #theme). Но при чем тут MS Excel?

Аватар пользователя Tutmanov Tutmanov 27 января 2010 в 12:49

Мне не нужно выводить форму в табличном виде, а нужно из введенных в форму данных формировать таблицу, что бы в дальнейшим открыть в Exel.