Установите FILE_STATUS_PERMANENT для загрузки файла настроек внешнего вида - PullRequest
2 голосов
/ 09 января 2012

В Drupal 7 у меня есть тема со следующим кодом в theme-settings.php:

function greytheme_form_system_theme_settings_alter(&$form, $form_state)
{
    $form["greytheme_home_img"] = array(
        '#type'          => 'managed_file',
        '#title'         => t('Home Page Image'),
        '#description'   => t("Home page image to be used in the ribbon."),
        // fileID (fid) used to display the file later
        '#default_value' => variable_get('greytheme_home_img', ''), 
        '#upload_location' => 'public://homeimg/',
        '#upload_validators' => array(
            'file_validate_extensions' => array("png jpg jpeg gif"),
        ),
    );
}

Это позволит мне загрузить и проверить изображение на экране настроек внешнего вида для этой темы.

Файл записывается в файловую систему, как и ожидалось. Тем не менее, загрузка файла не помечена FILE_STATUS_PERMANENT в базе данных, поэтому cronjob позднее сметет его. Как «перехватить» результаты загрузки этого файла, чтобы я мог установить FILE_STATUS_PERMANENT и получить fid объекта managed_file? У меня такое ощущение, что это как-то связано с system_theme_settings_submit () , но я не уверен, что нужно переопределить.

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Вам просто нужно добавить пользовательский обработчик отправки в форму, вы можете получить fid оттуда:

function greytheme_form_system_theme_settings_alter(&$form, $form_state) {
  $form["greytheme_home_img"] = array(
    '#type'          => 'managed_file',
    '#title'         => t('Home Page Image'),
    '#description'   => t("Home page image to be used in the ribbon."),
    // fileID (fid) used to display the file later
    '#default_value' => variable_get('greytheme_home_img', ''), 
    '#upload_location' => 'public://homeimg/',
    '#upload_validators' => array(
        'file_validate_extensions' => array("png jpg jpeg gif"),
    ),
  );

  $form['#submit'][] = 'greytheme_system_theme_settings_form_submit';
}

function greytheme_system_theme_settings_form_submit(&$form, &$form_state) {
  $fid = $form_state['values']['greytheme_home_img'];
  $file = file_load($fid);
  $file->status = FILE_STATUS_PERMANENT;
  file_save($file);
}
0 голосов
/ 12 апреля 2012

Почему вы используете variable_get('greytheme_home_img', '')? Это не сработало для меня, поэтому я использовал theme_get_setting('greytheme_home_img')

...