ВопросСоздание модуля Form api

Всем добрый день!

Прошу помощи не отправляется форма пишет "An illegal choice has been detected."

function input_menu()  {
 
  $items['input'] = array(
    'title' => 'popup',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('input_form'),
	'access callback' => TRUE,
   	);
 
  return $items;
}
 
 
function input_form($form, &$form_state) {
 $form['#prefix'] = '<div id="before-wrapper">';
  $form['#suffix'] = '</div>';
  $form['actions'] = array(
    '#type' => 'actions',
  );
 
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => 'submit',
    '#ajax' => array(
      'callback' => 'input_form_ajax_callback',
	  'wrapper' => 'before-wrapper',
    ),
  );
  $form['#attached']['library'][] = array('system', 'ui.dialog');
 $form['#attached']['css'][] = drupal_get_path('module', 'input') . '/input.css';
  return $form;
}
 
function input_form_ajax_callback($form, $form_state) {
 
  $form = drupal_get_form('input_more_form');
 
  $commands = array();
 
  $commands[] = ajax_command_append('body', '<div id="popup"></div>');
  $commands[] = ajax_command_html('#popup', render($form));
  $commands[] = ajax_command_invoke('#popup', 'dialog',array(array('modal' => TRUE)));
    $commands[] = ajax_command_invoke('input[name="action"]', 'click');
 
  return array('#type' => 'ajax', '#commands' => $commands);
}
 
function input_more_form($form, &$form_state) {
$form['#prefix'] = '<div id="after-wrapper">';
  $form['#suffix'] = '</div>';
   $form['#action'] = 'input'; // думаю что тут проблемы 
$form['#tree'] = TRUE;
 
  $form['input_surname'] = array (
	'#type' => 'textfield',
	'#title'=> 'Фамилия',
    '#required' => TRUE,
    '#size' => 18,
	);
$form['input_name'] = array (
	 '#type' => 'textfield',
    '#title'=> 'Имя',
	'#required' => TRUE,
    '#size' => 15,
	);
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
	 '#ajax' => array(
        'callback' => 'input_more_form_ajax_callback',
        'wrapper' => 'after-wrapper',
      ),
  );
 
  return $form;
}
 
function input_more_form_ajax_callback($form, $form_state) {
  return $form;
}

И функция SUBMIT:

function input_more_form_submit( $form,&$form_state) {
if (isset($form['submit']['#value']) && $form_state['triggering_element']['#value'] == $form['submit']['#value']) {
    $friend_email=$form_state['values']['email'];
    $mailto =$friend_email;  /
    $mailfrom ='from@example.com';
    $subject = "another message for  HTML email from example.com";
    $body="<h2 style='font-size:28px;color:red;'>Hello EMAIL, i here i want to be <b>bolded</b></h2>";
    if (drupal_mail('input_more_form', 'send_gift', $mailto, language_default(),$params,$mailfrom,TRUE)) {
        drupal_set_message(t('Your gift was sent successfully!!!'));
    }
    else {
        drupal_set_message(t('<font color="red">Error occured while sending your mail!!!</font>'));
    }
	exit;
	}
$form_state['rebuild'] = TRUE;
}
function input_mail($key,&$message,$params) {
    $language = $message['language'];
    switch ($key) {
        case 'send_gift':
            $message['subject']=t($params['subject'], $var, $language->language);
            $message['body'][]=$params['body'];
            $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
        break;
    }
}

Где упущена ошибка?

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

В какой момент выдаёт эту ошибку? Он форму вообще не загружает?

И кстати да -

 $form['#action'] = 'input'; // думаю что тут проблемы

такого #action'a нет. Либо post либо get.

09.05.2012 13:54
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

при нажатие кнопки SUBMIT форме input_more_form. Ругает на

An illegal choice has been detected. Please contact the site administrator.

и ЛОГ журнала вот эти сообщения

  1. Notice: Undefined variable: output in theme_input_more_form()
  2. Illegal choice in Where to meet element.
  3. Illegal choice in Time of arrival element.
09.05.2012 15:28
Аватар пользователя Spleshka
Spleshka написал:

$form['#action'] убирать пробовали?

09.05.2012 16:10
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

убрал. может в лс дать пример или тестовый сайт показать?

09.05.2012 16:42
Аватар пользователя Serik Yeleussizov
Serik Yeleussizov написал:

все сабмитится добавил в проблемые элементы

"#validate'=> true

и

'#default_value' => ''

. Все работает но думаю это против правил API. Только остался в логе PHP ошибка

Notice: Undefined variable: params in input_more_form_submit()

и

Notice: Undefined variable: output in theme_input_more_form()

. КТО знает где ошибка???

09.05.2012 17:54
Аватар пользователя Spleshka
Spleshka написал:

1. Не надо добавлять #validate и #default_value ко всем элементам, уберите это.
2. Первое замечание из-за :

if (drupal_mail('input_more_form', 'send_gift', $mailto, language_default(),$params,$mailfrom,TRUE))

Здесь используется переменная $params, которая не определена
3. Второе замечание из-за неопределённой переменной $output, которая находится где-то в коде, который вы не привели.

09.05.2012 19:47
Аватар пользователя yeleussizov
yeleussizov написал:

#Validate и #default_value не во всех элементах а только на RADIO кнопках, именно на них ругал drupal, а после как поставил все нормально.

Да и кстати $params точно не определен, я убрал.

А вот в функций theme_form () я забыл определить переменную $output. Надо было в начале указать

#output = ' '';

Спасибо за поддержку пошел дальше конструктировать форму

09.05.2012 22:34
Аватар пользователя yeleussizov
yeleussizov написал:

точнее

$output = ' ';
09.05.2012 22:38

Комментировать