2010-05-20 16 views
5

Sto provando a fornire ai miei utenti la funzionalità per modificare l'immagine di sfondo utilizzata in una pagina.Modifica immagine di sfondo di una pagina Drupal in base alla selezione dell'utente ...?

L'elenco delle immagini di sfondo sarà un numero piccolo che non cambierà davvero.

Ho pensato di aggiungere alcuni termini di tassonomia ... uno per ogni tipo di sfondo ... quindi applicare una classe al tag body quando viene visualizzata la pagina.

Questo suono è fattibile e, in caso affermativo, come farei per farlo?

Grazie

Sam

risposta

1

EDIT: risposta rivisto dopo il chiarimento della mia incomprensione della questione

Se l'immagine di sfondo è da definire per pagina (nodo), il tuo approccio attraverso un il vocabolario della tassonomia sembra la giusta via da seguire. Per rendere i termini disponibili per i CSS, il modo più semplice sarebbe quello di esportarli/usarli come classi nei file node.tpl.php, dove si ha accesso diretto alla variabile $node. Ma in quel caso, sono in qualche modo sepolti nel mezzo del markup risultante, il che rende un po 'difficile usarli correttamente.

Per aggiungerli alla variabile $body_classes nel file page.tpl.php, è necessario modificare la funzione zen_preprocess_page() per aggiungerli, oppure (approccio migliore) aggiungerli ai propri moduli/temi preprocess_page() la funzione, utilizzando la funzione zen come esempio:

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

NOTA: codice non testato, potrebbe contenere errori di battitura e di altre sviste.


(risposta originale prima della modifica - sulla base di un equivoco l'intenzione PO, la lasciò nel caso in cui altri fraintendono come bene :)
L'idea di base sembra fattibile, ma io suggerirei un minore variazione:

Poiché si desidera che l'impostazione sia regolabile per utente, è necessario passare attraverso alcuni anelli per consentire agli utenti di "taggarsi" con un termine di tassonomia. Penso che sarebbe molto più semplice abilitare il (core, ma facoltativo) profile module e configurare lì un campo 'background' (con tipo 'lista selezione'). Il campo verrà visualizzato nella pagina utente (o in una scheda separata in quella pagina, se gli si assegna una categoria), e la selezione dell'utente sarà disponibile dal codice in un secondo momento abbastanza facilmente, ad es. per ricavare una classe per il modello di pagina:

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

Non è un'impostazione che imposto per utente ... è destinata a essere per pagina. L'utente seleziona un tipo di sfondo da una casella di riepilogo quando ha creato una nuova pagina e lo sfondo selezionato sarà sempre lo stesso per quella singola pagina. Sto utilizzando un sottotema di Zen che genera già '$ body_classes' nel tag body di tutte le pagine. Quello che sto pensando di fare è emettere il termine di tassonomia insieme a questo. – Sambo

+1

@Sambo: Vedo, mi dispiace per l'incomprensione. Ho modificato la mia risposta di conseguenza. –

Problemi correlati