РЕДАКТИРОВАТЬ: пересмотренный ответ после выяснения моего недопонимания вопроса
Если фоновое изображение должно быть определено для страницы (узла), ваш подход с помощью словаря таксономии звучит как правильный путь. Чтобы сделать термины доступными для CSS, самым простым способом было бы просто вывести / использовать их как классы в файле (ах) node.tpl.php, где у вас есть прямой доступ к переменной $node
. Но в этом случае они несколько утопают в середине получившейся разметки, что затрудняет их правильное использование.
Чтобы добавить их в переменную $body_classes
в page.tpl.php, вам придется либо манипулировать функцией zen_preprocess_page()
, чтобы добавить их, либо (лучше подходить) добавить их в свою собственную Функция modules / themes preprocess_page()
, используя в качестве примера функцию zen:
function yourModuleOrTheme_preprocess_page(&$vars) {
// Add classes for body element based on node taxonomy
// Is this a node page?
if ('node' == arg(0) && is_numeric(arg(1))) {
// Yes, extract wanted taxonomy term(s) and add as additional class(es)
$node = node_load(arg(1));
$background_vid = yourFuntionToGetTheBackgroundVocabularyId(); // Could be hardcoded, but better to define as variable
$terms = $node['taxonomy'][$background_vid];
foreach ($terms as $tid => $term) {
// NOTE: The following assumes that the term names can be used directly as classes.
// You might want to safeguard this against e.g. spaces or other invalid characters first.
// Check the zen_id_safe() function for an example (or just use that, if zen is always available)
$vars['body_classes'] .= ' ' . $term;
}
}
}
ПРИМЕЧАНИЕ. Непроверенный код может содержать опечатки и другие упущения.
( Оригинальный ответ до редактирования - из-за неправильного понимания намерения ОП оставил ее на тот случай, если другие неправильно поняли это:)
Основная идея звучит выполнимо, но я бы предложил небольшую вариацию:
Так как вы хотите, чтобы настройка была настраиваемой для каждого пользователя, вам придется перепрыгивать через некоторые обручи, чтобы позволить пользователям «помечать» себя термином таксономии. Я думаю, что было бы намного проще просто включить (основной, но необязательный) модуль профиля и настроить там поле 'background' (с типом 'list selection'). Поле будет отображаться на странице пользователя (или отдельной вкладке на этой странице, если вы назначите ему категорию), и выбор пользователя будет доступен из кода позже довольно легко, например, чтобы получить класс для шаблона страницы:
global $user;
// NOTE: The following call would be the explicit way,
// but usually the profile fields get added to the $user object
// automatically on user_load(), so you might not need to call it at all,
// extracting the values directly from the $user object instead
$profile = profile_load_profile($user);
$background = $user->profile_background