Перейти к основному содержанию

Загрузка managed_file в форму настроек system_settings_form

Отправлено said от вт, 08/23/2016 - 17:54

Обработчик формы настроек сохраняет файл, но не ставит ему статус FILE_STATUS_PERMANENT, кроме того не удаляет файл, если он был удален в форме. Поэтому приходится самостоятельно писать соответствующий обработчик.

Пример формы настроек

function mymodule_settings_form($form, $form_state) {
	$form = array();
	$form['mymodule_pricelist'] = array(
	  '#type' => 'managed_file',
	  '#title' => 'Прайс-лист',
	  '#default_value' => variable_get('mymodule_pricelist', ''),
	  '#upload_location' => 'public://',
	);

	$form['#submit'][] = 'mymodule_settings_form_submit';

	return system_settings_form($form);
}

Собственно обработка сабмита

function mymodule_settings_form_submit($form, $form_state) {
  // ставлю статус FILE_STATUS_PERMANENT для файлов загруженных в форму настроек,
  // а так же обрабатываю удаление этих файлов
  if ($form_state['values']['mymodule_pricelist']) {
    $file = file_load($form_state['values']['mymodule_pricelist']);
    if ($file) {
      $file->status = FILE_STATUS_PERMANENT;
      file_save($file);
      file_usage_add($file, 'mymodule', 'settings', 1);
    }
  }
  else {
    $file = file_load(variable_get('mymodule_pricelist', ''));
    if ($file) {
      file_delete($file, TRUE);
      file_usage_delete($file, 'mymodule', 'settings', 1);
    }
  }
}

 

Теги