2010-05-20 10 views
5

Próbuję dać moim użytkownikom funkcjonalność do zmiany tego, jaki jest obraz tła na stronie.Zmienianie obrazu tła strony Drupal na podstawie wyboru użytkownika ...?

Lista obrazów tła będzie niewielką liczbą, która tak naprawdę nie ulegnie zmianie.

Pomyślałem, że mogę dodać kilka terminów dotyczących taksonomii ... po jednym dla każdego typu tła ... a następnie zastosować klasę do znacznika body podczas przeglądania strony.

Czy to brzmi wykonalne, a jeśli tak, to jak to zrobić?

Dzięki

Sam

Odpowiedz

1

EDIT: zmieniona odpowiedź po wyjaśnienia mojego niezrozumienia pytania

Jeśli obraz tła ma być zdefiniowany za (węźle) strony, swoje podejście za pośrednictwem Słownik taksonomiczny brzmi jak właściwa droga. Aby udostępnić warunki dla CSS, najłatwiej byłoby po prostu wypisać/użyć ich jako klas w pliku node.tpl.php, gdzie masz bezpośredni dostęp do zmiennej $node. Ale w takim przypadku są one nieco pochowane w środku wynikowego znacznika, co sprawia, że ​​używanie ich jest nieco trudniejsze.

Aby dodać je do zmiennej $body_classes w page.tpl.php, musisz albo zmodyfikować funkcję zen_preprocess_page(), albo też (lepsze podejście) dodać je do własnych modułów/motywów preprocess_page() funkcja, za pomocą funkcji zen jako przykład:

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; 
    } 
    } 
} 

UWAGA: Kod Nietestowane może zawierać literówki i inne niedopatrzenia.


(Original odpowiedź przed edit - opiera się na niezrozumieniu intencji OPS, zostawił ją w przypadku innych rozumieją go jako dobrze :)
Podstawowa idea brzmi to wykonalne, ale sugeruję małoletniego Odmiana:

Ponieważ chcesz, aby ustawienie było regulowane dla każdego użytkownika, musisz przeskoczyć przez kilka kółek, aby umożliwić użytkownikom "tagowanie się" terminem taksonomicznym. Myślę, że znacznie łatwiej byłoby włączyć (core, ale opcjonalnie) profile module i skonfigurować tam pole "background" (z typem "selection list"). To pole pojawi się na stronie użytkownika (lub oddzielnej karcie na tej stronie, jeśli nadasz mu kategorię), a wybór użytkownika będzie dostępny później z kodu dość łatwo, np. do wyprowadzenia klasy dla szablonu strony:

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

Nie jest to ustawienie, które ustawiłbym na użytkownika ... jego przeznaczeniem jest strona. Użytkownik wybiera typ tła z pola listy podczas tworzenia nowej strony, a wybrane tło będzie zawsze takie samo dla tej strony. Używam podprogramu Zen, który już wysyła "$ body_classes" do tagu treści wszystkich stron. Chodzi o to, by wyprowadzić termin taksonomii wraz z tym. – Sambo

+1

@Sambo: Rozumiem, przepraszam za nieporozumienie. Odpowiednio zredagowałem swoją odpowiedź. –

Powiązane problemy