2010-05-20 3 views
5

Я пытаюсь дать своим пользователям возможность изменять то, что используется фоновым изображением на странице.Изменение фонового изображения страницы Drupal на основе выбора пользователя ...?

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

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

Насколько это возможно, и если да, то как мне это сделать?

Благодаря

Сэм

ответ

1

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 
+0

Это не параметр, который я бы установил для каждого пользователя ... его предназначалось для каждой страницы. Пользователь будет выбирать тип фона из списка при создании новой страницы, и выбранный фон всегда будет одинаковым для этой отдельной страницы. Я использую подтему Zen, которая уже выводит «body_classes» в тег тела всех страниц. То, что я собираюсь сделать, - вывести термин таксономии вместе с этим. – Sambo

+1

@ Самбо: Я вижу, извините за недоразумение. Я отредактировал свой ответ соответственно. –

Смежные вопросы