Замена изображения через настройки темы оформления Drupal 7

Главные вкладки

Аватар пользователя alsagan alsagan 25 апреля 2018 в 13:13

Есть тема оформления, в которой url "фронтовой" картинки зашит в page.tpl.php и соответственно ни к какой ноде не привязан.
Задача
Дать возможность админу сайта менять эту картинку в настройках темы оформления - вот здесь /admin/appearance/settings/themename
На нашем форуме я ничего подобного не нашел. Кое-что на эту тему есть здесь http://xandeadx.ru/blog/drupal/364 и при помощи этого гайда достигнуты некоторые успехи.
А именно

В файл themname.info добавлена строка

settings[themename_front_img] = /sites/all/themes/themename/front-img.jpg

Затем в файл theme-settings.php добавлен такой код

<?php function themename_form_system_theme_settings_alter(&$form, &$form_state) {
  
$form['advanced_settings'] = array(
    
'#type' => 'fieldset',
    
'#title' => t('Advanced settings'),
  );
 
  
$form['advanced_settings']['boutique_front_img'] = array(
       
'#type' => 'textfield',
    
'#title' => t('Введите url изображения главного экрана'),
    
'#default_value' => theme_get_setting(themename_front_img'),
  );
} ?>

Затем в page.tpl.php добавлен вывод указанного выше url вот таким образом.
 <?php if($is_front){ print theme_get_setting('themename_front_img'); }  ?> 

И картинка выводится.

Однако
Я пока блуждаю в лабиринтах api и не знаю, что мне прописать в theme-settings.php такое, чтобы картинку на главной можно было заменить из настроек темы оформления.
Я уже пошел искать дальше, но все же я нуждаюсь в помощи. Подскажите пожалуйста, если кто-то уже знает.

Комментарии

Аватар пользователя alsagan alsagan 25 апреля 2018 в 13:53

Может быть я чего-то не понял, но мне показалось что эти функции не специфичны для настройки темы оформления, что это про загрузку файлов вообще. А надо чтобы загружалось и заменялось так же как логотип или favicon на странице /admin/appearance/settings/themename

Аватар пользователя bumble bumble 25 апреля 2018 в 14:00

"Функции" не специфичны, но фрагменты кода - вполне для форм, написанных с помощью Form API, именно такую форму Вы альтерите в themename_form_system_theme_settings_alter. Можете смело использовать.

Кстати, логотип и favicon в теме как раз заменяются, но не удаляются. Потому, это не лучший пример для подражания, лучше посмотрите и проанализируйте обе ссылки выше, потренируйтесь и у Вас все получится. Ну, или спрашивайте, если что получаться не будет, с примерами.

Аватар пользователя alsagan alsagan 25 апреля 2018 в 16:46

В итоге решил проблему, воспользовавшись советом из коммента на этой странице https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_ge... (этот коммент единственный)
О каширности метода судить не берусь - но он работает. При условии, разумеется, что в файле themename.info прописана соответствующая настройка.

Аватар пользователя alsagan alsagan 4 мая 2018 в 10:41

Как вскоре выяснилось это решение оказалось ущербным. После запуска хрона, как я предполагаю, изображение темы слетало. Дальнейшие поиски увенчались некоторым успехом. Вот здесь https://drupal.ru/node/105287 в комментах Niklan описывает костыль, который позволяет прописать файл на постоянной основе.
Костыль не прост в употреблении. Сначала в theme-settings.php надо добавить верхнюю часть кода, предложенного Niklan, затем загрузить изображение. Затем добавить в theme-settings.php часть кода, который дает указание записать файл на постоянной основе. Затем залить theme-settings.php повторно. После чего изображение надо загрузить еще раз. Тогда оно прописыватся как следует и появляется возможность произвольно заменять изображение темы.

Аватар пользователя bumble bumble 4 мая 2018 в 10:59

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

Аватар пользователя alsagan alsagan 4 мая 2018 в 11:04

Согласен, давно присматриваюсь к нему. А так дело обычное - надо решить задачу в ограниченные сроки - и многие разбирательства откладываются на потом.

Аватар пользователя bumble bumble 4 мая 2018 в 11:12

Это называется "Прокрастинация" - хроническое, профессиональное расстройство (у меня тоже такое, у большинства здесь Wink ).

Не откладывайте! Разобравшись 1 раз - сэкономите кучу времени в будущем.