Как можно реализовать вывод таблицы из формы (в принципе в любом формате), чтобы его в дальнейшим открыть в 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)", NULL, strtotime('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.'));
}
}
?>
Если можно, распишите по подробнее пожалуйста.
Комментарии
Если вопрос о том как форму вывести в табличном виде, то нужно смотреть в сторону функции темизации формы (атрибут #theme). Но при чем тут MS Excel?
Мне не нужно выводить форму в табличном виде, а нужно из введенных в форму данных формировать таблицу, что бы в дальнейшим открыть в Exel.
Лепите банально в CSV, даете ему расширение .xls юзер качает и видит все у себя в Excel.
Если можно распишите по подробней. Как данные экспортировать в CSV?