2012-01-09 5 views
2

업로드, 나는 테마 settings.php에서 다음 코드를 사용하여 테마를 가지고 이 테마에 대한 관리자 화면.설정 FILE_STATUS_PERMANENT 드루팔 7에서

파일이 예상대로 파일 시스템에 기록됩니다. 그러나 파일 업로드는 데이터베이스에 FILE_STATUS_PERMANENT으로 표시되지 않으므로 나중에 cronjob에서 스윕됩니다. 이 파일 업로드 결과를 "catch"하여 FILE_STATUS_PERMANENT을 설정하고 managed_file 개체의 fid을 가져 오는 방법은 무엇입니까? system_theme_settings_submit()과 관련이 있다는 느낌이 들지만 무엇을 무시해야할지 모르겠습니다.

답변

3
당신은 단지 사용자가 폼에 핸들러를 제출 추가 할 필요가

, 당신은 거기에서 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

Drupal은'greytheme_system_theme_settings_form_submit()'을 호출하기 전에 theme-settings.php를 요구하지 않아 치명적인 결과를 낳습니다. 어디에서'greytheme_system_theme_settings_form_submit()'을 선언해야합니까? – Karew

+0

'template.php'로 가겠다. 작동하지 않는다면 아마 사용자 정의 모듈에 넣어야 할 것이다. – Clive

+0

Drupal이로드되지 않는 것처럼 사용자 정의 모듈에 작성해야했다. 테마 설정 제출시 _any_ 테마 파일. 근본적으로 하나의 기능을 가진 모듈을 작성해야한다는 어리석은 생각이 들지만 작동하도록했습니다. – Karew

0

당신이 variable_get('greytheme_home_img', '')를 사용하는 이유는 무엇입니까? 그게 나를 위해, 그래서 내가 사용했습니다 theme_get_setting('greytheme_home_img')

+1

'theme_get_setting()'은 여러분이 * 사용하려고하는 것으로, 이미지를 잡아 내지 만 이런 식으로 저장하는 것은'FILE_STATUS_PERMANENT'를 설정하지 않습니다. 대신'variable_get()','variable_set()'을 사용하여 관리되는 이미지 ID를'greytheme_home_img'에 저장하는 설정 폼을 제출 한 후에 호출 된 모듈을 작성했습니다. – Karew

관련 문제