2
我正在構建一個能夠上傳自定義背景圖像的主題,但現在我被困在一個點上。如何通過theme-setting.php正確添加drupal表單中的FILE字段?
如何通過theme-setting.php正確添加drupal表單中的FILE字段,然後如何在我的模板文件中獲取公共URL到這個文件?
我正在構建一個能夠上傳自定義背景圖像的主題,但現在我被困在一個點上。如何通過theme-setting.php正確添加drupal表單中的FILE字段?
如何通過theme-setting.php正確添加drupal表單中的FILE字段,然後如何在我的模板文件中獲取公共URL到這個文件?
在你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
如果我決定上傳多個文件,例如'$ form ['theme_settings'] ['background_file'] [] = array(...' – SaidbakR
這個方法有一點侷限性,它是暫時的也就是說,在某個時候,上傳的圖像將被刪除,問題是:如何使其永久保存? – SaidbakR
@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 - 祝你好運。 –