Drupal form_submit и default_value - PullRequest
       36

Drupal form_submit и default_value

0 голосов
/ 20 января 2010

У меня есть простая форма:

function mymodule_test_form(&$form_state, $nid) {
  form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Click me!',
  );
  $form['mymodule_status'] = array(
    '#type' => 'select',
    '#attributes' => array('class' => 'myclass'),
    '#default_value' => variable_get('mymodule_status', 0),
    '#options' => array('one', 'two', 'three', 'four', 'five'),
  );
  return $form;
}

function mymodule_test_form_submit($form, &$form_state) {
  global $user;
  db_query("INSERT INTO {mymodule} (nid, uid, number, created) VALUES (%d, %d, %d, " . time() . ")", $nid, $user->uid, $status);
}

И в моем файле node-contenttype.tpl.php я печатаю drupal_get_form ('mymodule_test_form', $ node-> nid). Кстати, это правильный способ напечатать drupal_get_form в шаблоне? Я попытался добавить drupal_get_form в состояние представления hook_nodeapi, но ничего не выводилось, поэтому я просто напечатал его в шаблоне.

Другая вещь - это значение по умолчанию, я не уверен, как его использовать. Параметр variable_get всегда равен 0. Нужно ли создавать собственный запрос и устанавливать его в качестве значения по умолчанию? Я думал, что default_value автоматически получается с помощью drupal или чего-то еще ...

Надеюсь, я смогу помочь. Спасибо.

Редактировать: Обнаружено, что идентификатор узла находится в: $ form ['# parameters'] [2]

1 Ответ

1 голос
/ 21 января 2010

Вы используете variable_get для доступа к значению, предварительно установленному с помощью variable_set. Итак, variable_get ничего не возвращает, потому что не существует предварительно установленной переменной с именем mymodule_status. Смотри http://api.drupal.org/api/function/variable_get/6.

Я не уверен, но, похоже, вы хотите, чтобы значением по умолчанию было состояние, ранее установленное пользователем, если этот пользователь уже установил его. Вам нужно сделать запрос для этого случая.



function mymodule_test_form(&$form_state, $nid) {
  global $user;
  form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Click me!',
  );

  $query = "SELECT number FROM {mymodule} WHERE nid = %d AND uid = %d";
  $result = db_query($query, $nid, $user->uid);

  if ($result) $status = db_result($result);
  if ($status) $default_value = $status;
  else $default_value = 0;

  $form['mymodule_status'] = array(
    '#type' => 'select',
    '#attributes' => array('class' => 'myclass'),
    '#default_value' => $default_value,
    '#options' => array('one', 'two', 'three', 'four', 'five'),
  );
  return $form;
}

Также в вашей функции отправки вам нужно ссылаться на $ form_state ['values'] ['mymodule_status'] вместо $ status.

...