2012-08-29 13 views

回答

12

在你theme_form_system_theme_settings_alter鉤,你需要添加下面的表單元素:

$form['theme_settings']['background_file'] = array(
    '#type'  => 'managed_file', 
    '#title' => t('Background'), 
    '#required' => FALSE, 
    '#upload_location' => file_default_scheme() . '://theme/backgrounds/', 
    '#default_value' => theme_get_setting('background_file'), 
    '#upload_validators' => array(
     'file_validate_extensions' => array('gif png jpg jpeg'), 
    ), 
); 

這將保存文件ID到你的主題settigns變量「background_file」,請注意,我的上載位置設置爲主題/背景,這將在你的文件夾中。

最後你會得到完整的URL到文件與file_create_url:

$fid = theme_get_setting('background_file'); 
$image_url = file_create_url(file_load($fid)->uri); 

編輯:

在你的template.php您可以在theme_preprocess_page添加勾變量,這樣所有TPL的能訪問它,這是如何:

function theme_preprocess_page(&$variables, $hook) { 
    $fid = theme_get_setting('background_file'); 
    $variables['background_url'] = file_create_url(file_load($fid)->uri); 
} 

希望這有助於! :D

+0

如果我決定上傳多個文件,例如'$ form ['theme_settings'] ['background_file'] [] = array(...' – SaidbakR

+2

這個方法有一點侷限性,它是暫時的也就是說,在某個時候,上傳的圖像將被刪除,問題是:如何使其永久保存? – SaidbakR

+0

@sємsєм是對的,這不是一個完整的解決方案,因爲上傳的圖像在6個小時後消失了。欲瞭解更多信息:http://drupal.stackexchange.com/a/136911/4861或直接諮詢Drupal文檔:https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7 #managed_file - 祝你好運。 –

相關問題