Drupal form_submit и default_value

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

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]


person Wade    schedule 20.01.2010    source источник
comment
Вы хотите добавить страницу с формой или пытаетесь изменить форму добавления / редактирования типа контента?   -  person abhaga    schedule 20.01.2010
comment
Форма будет добавлена ​​на страницу просмотра узла. Таким образом, вы не увидите этого, когда будете редактировать узел.   -  person Wade    schedule 20.01.2010
comment
Уэйд, вы говорите о решениях (форме), но я не знаю, какую проблему вы решаете. Вы можете объяснить, чего пытаетесь достичь? Это какая-то рейтинговая система? (В таком случае почему бы не использовать drupal.org/project/fivestar?)   -  person marcvangend    schedule 21.01.2010
comment
Подобно пятизвездочному, но что-то гораздо более простое. У пользователей будет меню выбора, в котором они смогут выбрать вариант и отправить форму. Пока что у меня это работает, за исключением того, что теперь мне нужно получить значение по умолчанию. До сих пор я также работал над этим, создавая собственный запрос и задавая значение по умолчанию с результатом этого запроса. Однако я не уверен, что это правильный способ. Я думал, что default_value автоматически сохраняется где-то, о чем я не знаю. Итак, я видел, как пользователи используют variable_get, но от этого ничего не возвращается.   -  person Wade    schedule 21.01.2010


Ответы (1)


Вы используете 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.

person emmychan    schedule 21.01.2010
comment
Ладно, сейчас я понимаю, что это за переменная. Спасибо, именно то, что я хотел знать. :) - person Wade; 21.01.2010