EDIT: пересмотренный ответ после уточнения моего непонимания вопроса
Если фоновое изображение должно быть определено в (узла) страницы, ваш подход через Таксономический словарь звучит как правильный путь. Чтобы сделать условия доступными для CSS, самым простым способом было бы просто выводить/использовать их как классы в файле node.tpl.php, где у вас есть прямой доступ к переменной $node
. Но в этом случае они несколько зарыты в середине получающейся разметки, что затрудняет их правильное использование.
Чтобы добавить их в переменную $body_classes
в page.tpl.php, вам нужно либо манипулировать функцией zen_preprocess_page()
, либо добавить их (или более подходящий подход) добавить их в свои собственные модули/темы preprocess_page()
функции, используя дзен функцию в качестве примера:
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;
}
}
}
Примечание: Непроверенные код, может содержать опечатки и другие оплошности.
(Оригинальный ответ перед тем редактировать - основано на недоразумении умысла OPS, оставил ее в случае, если другие не понимают его так же :)
Основная идея звучит возможно, но я хотел бы предложить несовершеннолетнему изменение:
Поскольку вы хотите, чтобы настройка была настраиваемой для каждого пользователя, вам придется перепрыгнуть через некоторые обручи, чтобы пользователи могли «пометить» себя термином таксономии. Я думаю, было бы намного проще просто включить (основной, но необязательный) profile module и настроить поле «background» там (с типом «выбор списка»). Поле появится на странице пользователя (или отдельной вкладке на этой странице, если вы дадите ей категорию), и пользовательский выбор будет доступен из кода позже довольно легко, например. для получения класса для шаблона страницы:
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
Это не параметр, который я бы установил для каждого пользователя ... его предназначалось для каждой страницы. Пользователь будет выбирать тип фона из списка при создании новой страницы, и выбранный фон всегда будет одинаковым для этой отдельной страницы. Я использую подтему Zen, которая уже выводит «body_classes» в тег тела всех страниц. То, что я собираюсь сделать, - вывести термин таксономии вместе с этим. – Sambo
@ Самбо: Я вижу, извините за недоразумение. Я отредактировал свой ответ соответственно. –