Как правильно добавить поле FILE в форму drupal через theme-setting.php?

Я создаю тему с возможностью загрузки пользовательских фоновых изображений, но теперь я застрял в какой-то точке.

Как мне правильно добавить поле FILE в форму drupal через theme-setting.php и после этого, как я могу получить общедоступный URL-адрес этого файла в моих файлах шаблонов?


person Mohd Sakib    schedule 29.08.2012    source источник


Ответы (1)


В вашем хуке 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'),
    ),
  );

Это сохранит идентификатор файла в вашей переменной 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

person imekinox    schedule 30.08.2012
comment
Что мне делать, если я решил загрузить несколько файлов, т.е. $form['theme_settings']['background_file'][] = array(... - person SaidbakR; 20.07.2014
comment
У этого подхода есть небольшое ограничение, он работает временно. то есть через некоторое время загруженные изображения будут удалены. Возникает вопрос: как сделать его постоянным? - person SaidbakR; 22.07.2014
comment
@ sємsєм прав. Это не полное решение, так как загруженные изображения исчезнут через 6 часов. Дополнительную информацию можно найти в моем ответе: drupal.stackexchange.com/a/136911/4861 или проконсультируйтесь напрямую с Документы Drupal: api.drupal.org/api/drupal / - Удачи. - person Mario Awad; 14.11.2014