Drupal variable_set при сбросе значений формы администратора модуля - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь сделать variable_set (), когда нажимаю «Сбросить значения по умолчанию» в форме страницы моего модуля. Это выполняется через system_settings_form_submit (). #Default_value внутри моей формы сбрасывается, но мой модуль использует эту сохраненную переменную для отображения некоторых данных. Нажатие сброса заполняет форму по умолчанию, но не «сохраняет» ее, чтобы воссоздать переменную в базе данных, поэтому функция моего модуля прерывается. Похоже, что после нажатия кнопки «Сброс» ничего не происходит, кроме как удалить переменную из базы данных. Заранее спасибо.

Моя функция отправки выглядит следующим образом:

function faculty_submit(&$form, &$form_state){
  if($form_state['values']['op'] == 'Reset to defaults') {
    global $faculty_detail_template_default;
    variable_set('faculty_detail_template', $faculty_detail_template_default);
  }
  elseif ($form_state['values']['op'] == 'Save configuration') {
  // Clear caches for list and detail pages.
  cache_clear_all('faculty_list', 'cache', TRUE);
  cache_clear_all('faculty_detail_load', 'cache', TRUE);
  }
}

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Прежде всего это то, что system_settings_form_submit делает, когда вы нажимаете кнопку Сброс до значений по умолчанию . Он вызывает variable_del, который удалит все определенные вами переменные в форме из таблицы variables.

Теперь значение #default вашей формы, вероятно, заполнено, потому что вы делаете что-то вроде этого:

global $faculty_detail_template_default;
$form = array (
  '#default_value' => variable_get('faculty_detail_template', $faculty_detail_template_default),
);

Не понимаю, почему вы настаиваете на добавлении значения по умолчанию в таблицу variables. Весь этот подход несовершенен. Просто используйте variable_get($name, $default) везде, где ваш код зависит от faculty_detail_template. Именно для этого и используется второй параметр этой функции: $default The default value to use if this variable has never been set. Так что для Drupal отсутствие переменной в таблице variable означает, что кодеру решать, как обрабатывать этот случай (например, указать значение по умолчанию). Значение по умолчанию, указанное с помощью variable_get.

Во-вторых, если вы использовали system_settings_form, то у вас уже есть функция отправки, упомянутая выше (system_settings_form_submit), поэтому ваш faculty_submit не будет вызываться, если вы не добавите его специально в массив обратных вызовов submit быть казненным. Примерно так:

$form['#submit'][] = 'faculty_submit';
return system_settings_form($form); 

Кстати, использование глобальных переменных - плохая идея (в общем), и вы должны стараться избегать их использования. Для этого и используются переменные :) Куски информации, которые можно найти в разных частях кода. Поэтому вместо этого добавьте файл .install в свой модуль, и в этом файле вы определите эти глобальные переменные , используя variable_set. Это намного чище, чем просто магически выдвигать некоторые глобальные переменные в середине кода.

0 голосов
/ 17 ноября 2011

вам нужно использовать & $ form_state ['values'] ['yourVariableNameOfForm'] вместо того, что я выделил жирным шрифтом ниже.

variable_set ('faculty_detail_template', $ faculty_detail_template_default );

...