2012-01-09 9 views
2

をアップロードし、私がテーマのsettings.phpに次のコードを持つテーマを持っていますこのテーマの管理画面。設定FILE_STATUS_PERMANENTは、Drupalの7で

ファイルが期待通りにファイルシステムに書き込まれます。ただし、ファイルのアップロードにはデータベースにFILE_STATUS_PERMANENTのマークが付いていないため、後でクローンジョブによって掃除されます。このファイルアップロードの結果を「キャッチ」してFILE_STATUS_PERMANENTを設定し、managed_fileオブジェクトのfidを取得するにはどうすればよいですか? system_theme_settings_submit()と何か関係があると感じていますが、何を上書きするかはわかりません。

答えて

3

あなただけのフォームにハンドラを提出し、あなたがそこからfidをつかむことができますカスタムを追加する必要があります:あなたはvariable_get('greytheme_home_img', '')を使用しないのはなぜ

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

私はカスタムモジュールに書かなければなりませんでした。テーマ設定の送信時に_any_テーマファイル。本質的に1つの機能を持つモジュールを書く必要があることはばかげているようですが、私はそれを動作させました。 – Karew

0

?それは私のために働いていないので、私は使用しましたtheme_get_setting('greytheme_home_img')

+1

'theme_get_setting()'はあなたが*使用しようとしているものです*イメージをキャッチしますが、この方法で保存すると 'FILE_STATUS_PERMANENT'は設定されません。代わりに 'variable_get()'、 'variable_set()'を使って管理されたイメージIDを 'greytheme_home_img'に保存する設定フォームを送信した後に呼び出されるモジュールを書きました。 – Karew