2010-05-20 8 views
5

J'essaye de donner à mes utilisateurs la fonctionnalité pour changer ce qu'est l'image d'arrière-plan utilisée sur une page.Modifier l'image d'arrière-plan d'une page Drupal en fonction de la sélection de l'utilisateur ...?

La liste des images d'arrière-plan sera un petit nombre qui ne changera pas vraiment.

Je pensais pouvoir ajouter quelques termes Taxonomie ... un pour chaque type d'arrière-plan ... puis appliquer une classe à l'étiquette du corps lorsque la page est affichée.

Est-ce que cela semble faisable et si oui, comment procéder?

Merci

Sam

Répondre

1

EDIT: réponse révisée après la clarification de ma mauvaise compréhension de la question

Si l'image d'arrière-plan doit être défini par (noeud) page, votre approche par un vocabulaire de taxonomie semble être la bonne façon de procéder. Pour rendre les termes disponibles pour CSS, le plus simple serait de simplement les afficher/les utiliser comme des classes dans le (s) fichier (s) node.tpl.php, où vous avez un accès direct à la variable $node. Mais dans ce cas, ils sont quelque peu enfouis au milieu du balisage résultant, ce qui rend un peu difficile leur utilisation correcte. Pour les ajouter à la variable $body_classes dans la page.tpl.php, vous devez soit manipuler la fonction zen_preprocess_page() pour les ajouter aussi, ou (mieux les approcher) les ajouter à vos propres modules/thèmes fonction preprocess_page(), en utilisant la fonction zen comme un exemple:

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

NOTE: code non testé, peut contenir des fautes de frappe et autres oublis.


(réponse originale avant modifier - basé sur une mauvaise compréhension de l'intention de OPs, la gauche dans le cas où les autres comprennent mal aussi bien :)
L'idée de base semble possible, mais je vous suggère un mineur variation:

Étant donné que vous souhaitez que le paramètre soit ajustable par utilisateur, vous devez passer par des cerceaux pour permettre aux utilisateurs de se «marquer» eux-mêmes avec un terme de taxonomie. Je pense qu'il serait beaucoup plus facile de simplement activer le (core, mais optionnel) profile module et de configurer un champ 'background' là (avec le type 'list selection'). Le champ apparaîtra sur la page de l'utilisateur (ou un onglet distinct sur cette page, si vous lui donnez une catégorie), et la sélection de l'utilisateur sera disponible à partir du code plus tard assez facilement, par exemple. pour dériver une classe pour le modèle de page:

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

Ce n'est pas un paramètre que je définirais par utilisateur ... il est destiné à être par page. L'utilisateur sélectionne un type d'arrière-plan dans une zone de liste lorsqu'il crée une nouvelle page et l'arrière-plan sélectionné sera toujours le même pour cette page individuelle. J'utilise un sous-thème de Zen qui affiche déjà '$ body_classes' dans la balise body de toutes les pages. Ce que je pense faire est de sortir le terme de taxonomie avec cela. – Sambo

+1

@Sambo: Je vois, désolé pour le malentendu. J'ai édité ma réponse en conséquence. –