Почему моя функция отправки формы drupal не вызывается?

Тьфу, это, наверное, что-то простое, но это сводит меня с ума. У меня есть простая форма (просто кнопка отправки), которую я вставляю в узел с помощью hook_nodeapi(). Он вставляется правильно, и страница обновляется при отправке, но никогда не вызывает функцию form_submit(). Вот код:

function fantasy_stocks_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  $form = drupal_get_form('fantasy_stocks_buy_me_form', $node);
  switch ($op) {
    case 'view':
      $node->content['body']['#value'] .= $form;
      break;
  }
}

function fantasy_stocks_buy_me_form(&$form_state, $node) {
  $form['submit'] = array(
    '#type' => 'submit',
    '#title' => t('Buy') . ' ' . $node->title,
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'),
    '#value' => t('Buy') . ' ' . $node->title,
    '#submit' => TRUE
  );
  $form['node_added'] = array(
    '#type' => 'hidden',
    '#value' => $node->nid
  );
  $form['#submit'][] = 'fantasy_stocks_buy_me_form_submit';
  return $form;
}


function fantasy_stocks_buy_me_form_submit( $form, &$form_state ) {
  $message = 'You have submitted the ' . $form_id . ' form which contains the following data:<pre>' . print_r($form_values,true) . '</pre>';
  drupal_set_message(t($message));
}

Я пытался добавить эхо и die() в функцию отправки, она определенно не вызывается. Я также пытался оставить объявление $form['#submit'] , так как по умолчанию об этом должно позаботиться, но безрезультатно. Я знаю, что должен пропустить что-то глупое. Любые идеи?

Кроме того, одна вещь, которая кажется странной, заключается в том, что форма отображается со следующим тегом:

<form action="/MLMBid/node/5"  accept-charset="UTF-8" method="post" id="fantasy-stocks-buy-me-form-1"> 

Это нормально, что к идентификатору формы добавляется "-1"?


person SenorPuerco    schedule 12.03.2011    source источник


Ответы (2)


Наконец-то разобрался. Часть, которая создавала кнопку отправки:

$form['submit'] = array(
    '#type' => 'submit',
    '#title' => t('Buy') . ' ' . $node->title,
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'),
    '#value' => t('Buy') . ' ' . $node->title,
    '#submit' => TRUE
  );

Я скопировал часть этого из учебника, и, по-видимому, строка

'#submit' => TRUE

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

person SenorPuerco    schedule 12.03.2011

Я склонен думать, что «-1» в идентификаторе формы является корнем вашей проблемы. Однако не только «-1», почему идентификатор формы отображается с «-» вместо «_», как указано в остальной части кода. Решите это, и ваша проблема должна быть исправлена.

К сожалению, я еще не использовал Drupal (только Joomla). Я бы попробовал изменить код, чтобы он соответствовал тому, как отображается идентификатор формы (fantasy-stock-buy-me-form-1), а не тому, что у вас есть сейчас.

person mFontenot    schedule 12.03.2011
comment
Я не могу изменить имена функций, тире — недопустимый символ в имени функции. Я предполагаю, что drupal преобразует символы подчеркивания в тире при отображении формы, а затем преобразует их обратно для вызова функции? Но да, -1 это странно... Я посмотрю подробнее, почему это появляется. - person SenorPuerco; 12.03.2011
comment
-1 обеспечивает уникальность идентификатора в случае, если одна и та же форма может отображаться на странице несколько раз. - person Chris Burgess; 27.04.2012
comment
достаточно забавно, ответ получил -1 - person B2F; 05.09.2013