Изменение фонового изображения страницы Drupal на основе выбора пользователя ...? - PullRequest
5 голосов
/ 20 мая 2010

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

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

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

Это звучит выполнимо, и если да, то как мне это сделать?

Спасибо

Sam

1 Ответ

1 голос
/ 20 мая 2010

РЕДАКТИРОВАТЬ: пересмотренный ответ после выяснения моего недопонимания вопроса

Если фоновое изображение должно быть определено для страницы (узла), ваш подход с помощью словаря таксономии звучит как правильный путь. Чтобы сделать термины доступными для 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
...