Есть тема оформления, в которой 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 такое, чтобы картинку на главной можно было заменить из настроек темы оформления.
Я уже пошел искать дальше, но все же я нуждаюсь в помощи. Подскажите пожалуйста, если кто-то уже знает.
Комментарии
Да, вы на верном пути.
Я бы рекомендовал посмотреть реалицию в темах, где из коробки есть слайдер.
Может быть я чего-то не понял, но мне показалось что эти функции не специфичны для настройки темы оформления, что это про загрузку файлов вообще. А надо чтобы загружалось и заменялось так же как логотип или favicon на странице /admin/appearance/settings/themename
"Функции" не специфичны, но фрагменты кода - вполне для форм, написанных с помощью Form API, именно такую форму Вы альтерите в themename_form_system_theme_settings_alter. Можете смело использовать.
Кстати, логотип и favicon в теме как раз заменяются, но не удаляются. Потому, это не лучший пример для подражания, лучше посмотрите и проанализируйте обе ссылки выше, потренируйтесь и у Вас все получится. Ну, или спрашивайте, если что получаться не будет, с примерами.
В итоге решил проблему, воспользовавшись советом из коммента на этой странице https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_ge... (этот коммент единственный)
О каширности метода судить не берусь - но он работает. При условии, разумеется, что в файле themename.info прописана соответствующая настройка.
Как вскоре выяснилось это решение оказалось ущербным. После запуска хрона, как я предполагаю, изображение темы слетало. Дальнейшие поиски увенчались некоторым успехом. Вот здесь https://drupal.ru/node/105287 в комментах Niklan описывает костыль, который позволяет прописать файл на постоянной основе.
Костыль не прост в употреблении. Сначала в theme-settings.php надо добавить верхнюю часть кода, предложенного Niklan, затем загрузить изображение. Затем добавить в theme-settings.php часть кода, который дает указание записать файл на постоянной основе. Затем залить theme-settings.php повторно. После чего изображение надо загрузить еще раз. Тогда оно прописыватся как следует и появляется возможность произвольно заменять изображение темы.
Уверяю, можно грузить файлы без таких ухищрений.
Examples, может, даст Вам больше
надеждыпонимания как все устроено, и как сделать форму рабочей.Согласен, давно присматриваюсь к нему. А так дело обычное - надо решить задачу в ограниченные сроки - и многие разбирательства откладываются на потом.
Это называется "Прокрастинация" - хроническое, профессиональное расстройство (у меня тоже такое, у большинства здесь
).
Не откладывайте! Разобравшись 1 раз - сэкономите кучу времени в будущем.